Всегда ли метод finalize () вызывается сборщиком мусора перед уничтожением недоступного объекта? - PullRequest
0 голосов
/ 03 октября 2018

Я красный по следующей ссылке: Сборка мусора от Geeksforgeeks и здесь говорится, что:

Метод finalize () никогда не вызывается более одного раза для любого данногообъект.

Итак, здесь сказано «более одного раза», и мне интересно, есть ли вероятность, что finalize () метод не являетсявызывается и сборщик мусора уничтожает этот объект.

Возможно ли это?

1 Ответ

0 голосов
/ 04 октября 2018

Когда ГХ обнаружил объект с классом, в котором finalize() был переопределен, он добавляется в очередь объектов для вызова finalize () для них.Только после того, как объект был завершен один раз, GC может очистить его.то есть это будет на более позднем GC.

Например, если объект находится в постоянном пространстве, он может быть найден до тех пор, пока не будет выполнен полный сбор, и он будет очищен только на полном GC после метода finalizeбыл вызван.

Для получения дополнительной информации, это Java 11 Javadoc для Object.finalize()

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Object.html#finalize()

, так что есть ли вероятность, что сборщик мусораполностью уничтожил объект в куче, но не вызвал метод finalize () для этого объекта?

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

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

Он не будет уничтожен, пока есть сильная ссылка на него.

...