Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> cache with softreference 
:(
    Опции темы
gelo86
Дата 5.1.2009, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 388
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Добрыи день. Вот почитал про softreference и везде примеры с кешами. Типо если уже мало памяти осталось то разумеется можно чтото викинуть с кеша smile Для етого и исползуэтся всякие softreference. Всегда исползовал ehcache у которого простой HashMap. Но если мая програма действително болшая, то когдато кеш будет исползоват пачти всю память. Панимаю что можно ставить срок жизни в кеше, но ето както мне кажеться кривовато. Вот и подумал, не исползуют ли другие кеши такие как хапример jboss обекты softreference, чтобы непалучить OutOfMemoryError?
PM MAIL   Вверх
tux
Дата 6.1.2009, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



ehcache предоставляет достататочно конфигурационных настроек, чтобы можно было контролировать использование памяти под кэш. Поведение ehcache при этом предсказуемо и зависит от политики удаления из кэша - LRU, LFU или FIFO. Представь себе теперь что для всех ссылок на элементы кэша используются SoftReference. Получается что указание политики бессмысленно поскольку JVM может выкинуть из кэша первый попавшийся объект. В лучшем случае кэш будет адекватно работать до тех пор пока достаточно памяти, а потом могут поудаляться как раз те объекты, которые сейчас активно используются. Тем не менее, ehcache иногда использует SoftReference. Например, в случае асинхронной репликации. В этом случае элементы кэша складываются в очередь и синхронизируются через некоторое время. Если возникли какие-то сбои в работе сети, то очередь может бесконечно разрастаться, тогда использование SoftReference вполне оправдано, хотя в этом случае тоже не будет никакой логики в том, что именно будет синхронизировано между узлами. Естественно, это все касается кэша в памяти. Логика кэширования на диске от SoftReference никак не пострадает.

Не знаю как дело обстоит в JBoss Cache, но скорее всего там тоже не используются SoftReference для хранения элементов кэша.

Что касается примеров с кэшами и SoftReference, то это простейший пример, с помощью которого можно продемонстрировать работу SoftReference, в реальных приложениях такой кэш вряд ли применим.
PM MAIL Skype GTalk Jabber YIM   Вверх
gelo86
Дата 6.1.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 388
Регистрация: 26.10.2007

Репутация: нет
Всего: нет



Можно поточнее про 
Цитата(tux @  6.1.2009,  09:45 Найти цитируемый пост)
удаления из кэша - LRU, LFU или FIFO
. FIFO я так понимаю (First In First Out), но тогда получается кеш на адин запорос чтоли?
Да в ehcache можна задать сколко елементов держат в памяти. А если всетаки в кеше будет намного менше елементов и память закончится? Кеш сам чемто помагает в таких ситуациях? А что за LRU, LFU?

PM MAIL   Вверх
tux
Дата 6.1.2009, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 31
Всего: 132



Цитата(gelo86 @  6.1.2009,  15:15 Найти цитируемый пост)
FIFO я так понимаю (First In First Out), но тогда получается кеш на адин запорос чтоли?

Как это на один? Не понятно.
Цитата(gelo86 @  6.1.2009,  15:15 Найти цитируемый пост)
А если всетаки в кеше будет намного менше елементов и память закончится? Кеш сам чемто помагает в таких ситуациях?

Если память закончилась - это значит, что либо где-то в приложении утечка памяти либо реально недостаточно хипа для работы. Решения проблемы зависят от логики приложения. Либо уменьшать кэш либо увеличивать хип либо придумывать что-то еще. Например, объекты большого размера можно просто не ложить в кэш. ehcache ничем в этом случае не поможет - в параметрах у него можно задать только количество элементов. На это есть свои причины. ehcache никаким простым способом не может определить сколько памяти реально отнимают объекты, находящиеся в кэше. По крайней мере мне такой способ не приходит в голову, а JVM не предоставляет таких возможностей. 

Цитата(gelo86 @  6.1.2009,  15:15 Найти цитируемый пост)
А что за LRU, LFU?

http://ehcache.sourceforge.net/EhcacheUser....html#id.s7.1.1

Добавлено через 14 минут и 29 секунд
Кстати, вот рекомендации по тюнингу сборки мусора для ehcache - http://ehcache.sourceforge.net/EhcacheUserGuide.html#id.s13.
PM MAIL Skype GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0466 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.