@Override
    @SuppressWarnings("unchecked")
    public <T> T getFromCache(AssetKey<T> key) {
        AssetRef smartInfo = smartCache.get(key);
        if (smartInfo == null) {
            return null;
        } else {
            // NOTE: Optimization so that registerAssetClone()
            // can check this and determine that the asset clone
            // belongs to the asset retrieved here.
            AssetKey keyForTheClone = smartInfo.get();
            if (keyForTheClone == null) {
                // The asset was JUST collected by GC
                // (between here and smartCache.get)
                return null;
            }

            // Prevent original key from getting collected
            // while an asset is loaded for it.
            ArrayList<AssetKey> loadStack = assetLoadStack.get();
            loadStack.add(keyForTheClone);

            return (T) smartInfo.asset;
        }
    }
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