В пример за анотация @remove на EJB с поддържащо състояние, анотираният метод анулира променливите на екземпляра на компонента. Защо? Със сигурност унищожаването на зърна унищожава съдържанието му, т.е. всички променливи?
Благодаря, Джон
В пример за анотация @remove на EJB с поддържащо състояние, анотираният метод анулира променливите на екземпляра на компонента. Защо? Със сигурност унищожаването на зърна унищожава съдържанието му, т.е. всички променливи?
Благодаря, Джон
Задаването на всички полета на обект на null
има два полезни ефекта:
Той осигурява твърда бариера срещу логически грешки, които биха довели до повторно използване на невалиден обект. Приложението ще се срине, вместо безшумно да дава неправилни резултати.
Той помага на Java VM събирача на отпадъци, като премахва ръбовете от референтната графика на обекта, като по този начин подобрява цялостната производителност.
null
. Ако това е просто присвояване в хода на нормална работа, това е добре и полезно, поне според моя профильор. Ако това изисква възпроизвеждане на работата на GC чрез изрично ходене по сложни структури, тогава това е много лоша идея. Като цяло, човек трябва да профилира програмата си, преди да предприеме такива микрооптимизации...
- person thkala; 07.05.2012
Можете ли да публикувате примерния изходен код? Или недей. Проактивната настройка на null
не е необходима - когато EJB бъде унищожен и боклукът се събира скоро по-късно, всички обекти, към които той препраща (разбира се, при условие че няма други препратки към тях), също ще бъдат събирани.
Ако ejbRemove(), атрибутите на екземпляра се изтриват и клиентът все още има препратка към екземпляра. Клиентът все още има достъп до същия обект. Това не е желателно.