Вопрос-ответ

How to force garbage collection in Java?

Как принудительно собрать мусор в Java?

Возможно ли принудительно собрать мусор в Java, даже если это сложно сделать? Я знаю о System.gc(); и Runtime.gc();, но они только предлагают выполнять GC. Как я могу принудительно выполнить GC?

Переведено автоматически
Ответ 1

Ваш лучший вариант - вызвать System.gc() который просто является подсказкой сборщику мусора, что вы хотите, чтобы он выполнил сборку. Однако нет способа принудительно выполнить немедленную сборку, поскольку сборщик мусора недетерминирован.

Ответ 2

В библиотеке jlibs есть хороший служебный класс для сборки мусора. Вы можете принудительно собрать мусор, используя изящный маленький трюк с объектами WeakReference.

RuntimeUtil.gc() из jlibs:

   /**
* This method guarantees that garbage collection is
* done unlike <code>{@link System#gc()}</code>
*/

public static void gc() {
Object obj = new Object();
WeakReference ref = new WeakReference<Object>(obj);
obj = null;
while(ref.get() != null) {
System.gc();
}
}
Ответ 3

Лучшим (если не единственным) способом принудительной сборки GC было бы написать пользовательскую JVM. Я полагаю, что сборщики мусора подключаемы, поэтому вы, вероятно, могли бы просто выбрать одну из доступных реализаций и настроить ее.

Примечание: Это непростой ответ.

Ответ 4

Используя интерфейс виртуальной машины Java™ (JVM TI), функция

jvmtiError ForceGarbageCollection(jvmtiEnv* env)

"Принудит виртуальную машину выполнить сборку мусора". JVM TI является частью архитектуры отладчика платформы JavaTM (JPDA).

java