Почему мы не знаем, когда будет запущен сборщик мусора.
Это преднамеренный выбор дизайна. Это дает JVM гибкость в сборе мусора за раз (и в некотором роде), что дает оптимальную производительность или минимальные паузы ... в зависимости от выбранного вами коллекционера.
Когда будет запущен сборщик мусора, будет определенное условие или время.
No.
Единственное, что она в значительной степени гарантирует, что полный GC будет работать до того, как JVM решает «отказаться» и бросить OutOfMemoryError
.
Метод System.gc()
который вы можете позвонить в , чтобы предложить JVM, что он должен запускать сборку мусора. Однако:
JVM разрешено игнорировать это предложение.
Если JVM обращает внимание на это предложение, ваше приложение может работать хуже, чем если бы вы разрешили JVM. Вызов System.gc()
в производственном коде почти всегда является BAD IDEA.
Суть заключается в том, что если вы хотите, чтобы гарантировать, что определенное действие происходит, вы не должны выполнять это действие с помощью finaliser.
+1 Я бы добавил, что любое исключение, вызванное кодом, запущенным в финализаторе, будет проглочено, и код будет умирать молча, в результате чего трудно найти ошибки. –