Когда лучше всего выпускать кэшированные объекты в Java? - PullRequest
4 голосов
/ 22 февраля 2012

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

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

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

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

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

1 Ответ

7 голосов
/ 22 февраля 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...