Рад что эта статья кому-то пригодится. Советую перед использованием Reference, сформулировать себе чего именно вы хотите достичь. Часто бывает, что непродуманное использование приводит только к снижению производительности.
У вас вот очень даже хорошо сформулировано, прямо как под заказ: мне нужен кеш изображений, работающий по принципу — держать в памяти пока её хватает, удалять изображения из памяти, если её становится мало. SoftReference подходит идеально.
Да, я как-то писал кэш объектов на основе WeakReference дотнета. Если проводить параллели, то они больше соответствуют SoftReference, чем одноимённым ссылкам: A weak reference is valid only during the indeterminate amount of time until the object is collected when no strong references exist.
Хочу добавить, что если программируете под андроид, то лучше не использовать SoftReference для кеширование. Поведение Dalvik VM с SoftReference не совсем такое, как на JVM, и они могут быть удалены слишком рано, что сведёт на нет всю пользу от кеша. В документации к SoftReference на андроиде советуют использовать LruCache.
По поводу Dalvik VM не скажу, но вот по поводу JVM часто можно встретить подобные высказывания. Многие, в качестве лучшей альтернативы, рекомендуют использовать кэш, который реализовывает LRU алгоритм. Например в LinkedHashSet можно переопределить метод removeEldestEntry. Но нельзя говорить о том что кэш на основе SoftReference всегда проигрывает. У него есть свои плюсы. Как пример, почитайте обсуждение тут — SoftReference Read-Write Cache для Hibernate
Насоздают софтссылок, в итоге жабоприложение выжирает память откуда только можно и сваливает полсистемы в своп. Привет, тормоза. При этом софтссылки автоматом не очищаются, т. к. память-то как бы есть и приложение больше не просит. А то что там кому-то другому не хватает памяти, жабе пофигу.
Вы кого обвиняете? Автора за то, что он рассказал про один из инструментов джавы? Давайте ещё производителей ножей обвиним, в том, что «понакупают ножей, а потом убивают обычных людей».
Немного сумбурно, но всё-таки полезная статья, знал про них, но всегда забывал разобраться подробнее.
PS: Зайдите пожалуйста сюда и если не сложно, то поправьте статью, читать тяжело.
… сколько времени существует soft-ссылка после последнего обращения к ней. Обозначим этот интервал буквой I
… после последнего обращения к ней коллектором:
interval is the time between the last GC's clock and the timestamp of the ref we are currently examining…
Мягкие ссылки на страже доступной памяти или как экономить память правильно