Comments 23
Как же вы вовремя! Как-раз делаю нечто очень похожее на ваш «надуманный» пример. Спасибо за полезную статью.
+1
Рад что эта статья кому-то пригодится. Советую перед использованием Reference, сформулировать себе чего именно вы хотите достичь. Часто бывает, что непродуманное использование приводит только к снижению производительности.
+1
У вас вот очень даже хорошо сформулировано, прямо как под заказ: мне нужен кеш изображений, работающий по принципу — держать в памяти пока её хватает, удалять изображения из памяти, если её становится мало. SoftReference подходит идеально.
0
Очень интересная тема, надо бы разобраться во всех нюансах. Не подозревал о таких возможностях джавы под боком.
+1
Будучи дотнетчиком, сильно уважаю джаву за её технологичность и открытость. Замечательная статья, спасибо!
+4
В .NET есть слабые ссылки:
msdn.microsoft.com/ru-ru/library/system.weakreference.aspx
msdn.microsoft.com/ru-ru/library/system.weakreference.aspx
0
Хочу добавить, что если программируете под андроид, то лучше не использовать SoftReference для кеширование. Поведение Dalvik VM с SoftReference не совсем такое, как на JVM, и они могут быть удалены слишком рано, что сведёт на нет всю пользу от кеша. В документации к SoftReference на андроиде советуют использовать LruCache.
+6
По поводу Dalvik VM не скажу, но вот по поводу JVM часто можно встретить подобные высказывания. Многие, в качестве лучшей альтернативы, рекомендуют использовать кэш, который реализовывает LRU алгоритм. Например в LinkedHashSet можно переопределить метод removeEldestEntry. Но нельзя говорить о том что кэш на основе SoftReference всегда проигрывает. У него есть свои плюсы. Как пример, почитайте обсуждение тут — SoftReference Read-Write Cache для Hibernate
0
А не подскажете, соответствует ли работа Dalvik-а с PhantomReference официальной документации, или тоже существуют какие-то подводные камни?
0
Очень познавательно, спб!
0
Прочел я эту статью о хитростях и премудростях Java и возрадовался, что программирую на Си.
+1
Насоздают софтссылок, в итоге жабоприложение выжирает память откуда только можно и сваливает полсистемы в своп. Привет, тормоза. При этом софтссылки автоматом не очищаются, т. к. память-то как бы есть и приложение больше не просит. А то что там кому-то другому не хватает памяти, жабе пофигу.
-8
Привет, java -help
+3
Вы кого обвиняете? Автора за то, что он рассказал про один из инструментов джавы? Давайте ещё производителей ножей обвиним, в том, что «понакупают ножей, а потом убивают обычных людей».
+3
Ваше «жабоприложение» выжрет памяти не больше чем вы ему разрешите.
+2
Немного сумбурно, но всё-таки полезная статья, знал про них, но всегда забывал разобраться подробнее.
PS: Зайдите пожалуйста сюда и если не сложно, то поправьте статью, читать тяжело.
PS: Зайдите пожалуйста сюда и если не сложно, то поправьте статью, читать тяжело.
0
эх, зря я пользовался для организации кэшей WeakHashMap. Так что, спасибо за статью, было трудно усвоить различия между разными типами ссылок.
0
Отмечу, что MapMaker.makeComputingMap() в Guava — deprecated с версии 10.0 (сейчас уже 14.0). Вместо него нужно использовать CacheBuilder.build()
-1
Only those users with full accounts are able to leave comments. Log in, please.
Мягкие ссылки на страже доступной памяти или как экономить память правильно