@Override
    public <T> void addToCache(AssetKey<T> originalKey, T obj) {
        // Make room for new asset
        removeCollectedAssets();

        CloneableSmartAsset asset = (CloneableSmartAsset) obj;

        // No circular references, since the original asset is
        // strongly referenced, we don't want the key strongly referenced.
        asset.setKey(null);

        // Start tracking the collection of originalKey
        // (this adds the KeyRef to the ReferenceQueue)
        KeyRef ref = new KeyRef(originalKey, refQueue);

        // Place the asset in the cache, but use a clone of
        // the original key.
        smartCache.put(ref.clonedKey, new AssetRef(asset, originalKey));

        // Push the original key used to load the asset
        // so that it can be set on the clone later
        ArrayList<AssetKey> loadStack = assetLoadStack.get();
        loadStack.add(originalKey);
    }
Stores the original key and original asset.
The asset info contains a cloneable asset (e.g. the original, from
which all clones are made) and also a weak reference to the
original key, which is used when the clones are produced.
jme3-core/src/main/java/com/jme3/asset/cache/WeakRefCloneAssetCache.java