Вместо того, чтобы беспокоиться обо всем этом, рассмотрите возможность упаковки объекта, представляющего каждое изображение, в WeakReference .Затем просто выполните кеширование с помощью Map<String, WeakReference<Image>>
или как вы это делаете.
Таким образом, если он уже находится в кеше, используйте его.Если он не находится в кэше (либо к нему никогда ранее не обращались, либо он был GC'd), то получите его снова.