зачем обнулять переменные экземпляра при уничтожении EJB с отслеживанием состояния?

В примере аннотации @remove для EJB с отслеживанием состояния аннотированный метод аннотирует переменные экземпляра компонента. Почему? Конечно, уничтожение bean-компонента уничтожает его содержимое, то есть любые переменные?

Спасибо, Джон


person Jon    schedule 06.05.2012    source источник


Ответы (3)


Установка для всех полей объекта значения null дает два полезных эффекта:

  • Он обеспечивает жесткий барьер против логических ошибок, которые могут привести к повторному использованию недопустимого объекта. Приложение будет аварийно завершать работу вместо того, чтобы молча выдавать неправильные результаты.

  • Это помогает сборщику мусора Java VM, удаляя ребра из графа ссылок на объекты, тем самым повышая общую производительность.

person thkala    schedule 06.05.2012
comment
Установка нулевых ссылок на элементы маловероятно помогите сборщику мусора. - person McDowell; 07.05.2012
comment
@McDowell: это будет зависеть от того, как в полях установлено значение null. Если это простое задание в ходе обычной работы, это хорошо и полезно, по крайней мере, согласно моему профилировщику. Если требуется копировать работу сборщика мусора путем явного обхода сложных структур, то это очень плохая идея. В общем, нужно профилировать свою программу, прежде чем идти на такие микрооптимизации... - person thkala; 07.05.2012

Можете ли вы опубликовать исходный код примера? Или не надо. Упреждающая установка null не требуется - когда EJB будет уничтожен и вскоре после этого будет собран мусор, все объекты, на которые он ссылается (конечно, при условии, что на них нет других ссылок), также будут удалены сборщиком мусора.

person Tomasz Nurkiewicz    schedule 06.05.2012

Если ejbRemove(), атрибуты экземпляра стираются, и клиент все еще имеет ссылку на экземпляр. Клиент по-прежнему может получить доступ к тому же объекту. Это нежелательно.

person Neelesh Shukla    schedule 16.07.2014