Как проверить / заставить классы собирать мусор - PullRequest
1 голос
/ 02 февраля 2011

Я нахожусь в сценарии, где я запускаю приложения в определенном Classloader через определенный API-интерфейс точки входа, что-то вроде "OSGi".И я сделал конкретные методы, такие как: start и stop.И запущенные приложения находятся в массиве с именем applications.

. Если я хочу завершить приложение, я бы вызвал его метод stop.Однако предположим, что приложение является вредоносным и не очищает свой класс / ресурсы, как я могу заставить его собирать мусор ???

Если я сделаю простой applications[i] = null;в основном приложении заставит ли это вредоносное приложение, не очистившее какой-либо ресурс, быть подвергнутым сборке мусора ???

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

Если в приложениях [i] хранится единственная ссылка на приложения, то это потребуется.Однако следующий цикл GC не может быть предсказан.Таким образом, приложение может иметь более длительный срок службы, чем ожидалось

1 голос
/ 02 февраля 2011

Сборщик мусора будет собирать неиспользуемые объекты (то есть объекты без ссылки) самостоятельно.Это не может быть принудительно, это не может быть предсказано хорошо.Однако его можно попросить запустить, вызвав

System.gc()

. Обратите внимание, что это тоже ничего не гарантирует, а просто "предлагает", чтобы началась сборка мусора.Но это обычно считается плохой практикой, потому что это может серьезно повлиять на производительность процесса сборки мусора и JVM.

Поэтому в большинстве случаев лучше всего убедиться, что не осталось никаких ссылок, чтобы объект можно было собирать, когда ГК сочтет это целесообразным.

1 голос
/ 02 февраля 2011

Нет, вы не можете сказать сборщику мусора принудительно собрать конкретный объект.Установка ссылки на null ничего не гарантирует.

Вы можете запустить потенциально вредоносное приложение в отдельном процессе и завершить процесс, когда закончите с ним.Затем операционная система обеспечит освобождение всех ресурсов (памяти и других ресурсов).

...