I looked around. UrlResourceStreamReference is package private to the org.apache.wicket.util.resource.locator.caching package. It is used ONLY by the CachingResourceStreamLocator class, which converts UrlResourceStream instances to UrlResourceStreamReference instances, and stores them in a java.util.Map.
This map acts as a cache of the result of locating resources, including not-found entries. The idea behind the cache it to avoid having to FIND resources every time they are required, but just use the caches find result from the map.
The map is never serialized, as CachingResourceStreamLocator is not Serializable and neither is IResourceStreamLocator, which it implements.
IResourceStreamLocator is mainly used from: Application.get().getResourceSettings().getResourceStreamLocator().
I vote we just keep a reference to the original URL.
Pro: we can load arbitrary URLs, from any url scheme, using its configured URLStreamHandler.
Con: the URL object probably uses slightly more memory that the external form string.