2012-02-22 5 views
4

Я разрабатываю настольное приложение Java, где у меня много кешей, таких как пулы объектов, кэшированные JPanels ... и т. Д.Когда это хорошее время для выпуска кэшированных объектов в Java?

Пример: Когда пользователь переключается с одной панели на другую, я не уничтожаю предыдущую, если пользователь переключается обратно.

Но потребление памяти приложения может получить высокое в то время как система находится в отчаянной потребности этих ресурсов памяти, что я потребляющий не так оправданна ...

В приложении IOS, я бы выпустить их в метод "applicationDidReceiveMemoryWarning". Но на Java ...?

Итак, когда это подходящее время для выпуска кэшированных объектов в Java?

ответ

7

Кэширование - это не очень хорошая идея в Java. Создание новых объектов обычно намного дешевле, чем вы думаете, и часто приводит к лучшей производительности, чем сохранение объектов в кеше «на всякий случай». Наличие много долгоживущих объектов плохо для производительности GC, а также может оказать значительное давление на процессорные кэши.

JPanels, например, - достаточно легкие, чтобы создать совершенно новый, когда вам это нужно.

Если бы я тебя, я бы кэшировать как можно меньше, и сделать это только, когда вы доказали существенное преимущество производительности от этого.

Даже если вам нужно кэшировать, подумайте об использовании кеша, который использует Soft References. Таким образом, JVM сможет автоматически очищать элементы из кэша, если требуется освободить память. Это проще и безопаснее, чем пытаться перевернуть собственную стратегию кэширования. Вы могли бы использовать существующую реализацию кэша Soft Reference, такую ​​как Guava (спасибо AlistairIsrael!).

+0

Хорошо сказано - вместо этого я использовал бы WeakReference, чтобы действительно «держаться подальше от дороги». –

+0

Ничего себе. Я признаю, что не знал об этом раньше. Я немного искал и нашел его чрезвычайно полезным. Немного устаревшая, но замечательная статья: http://weblogs.java.net/blog/2006/05/04/understanding-weak-references – Mazyod

+0

+1 для упоминания мягких ссылок. – casablanca

Смежные вопросы