Всегда ли метод finalize() вызывается сборщиком мусора перед уничтожением недоступного объекта?
Я красный по следующей ссылке: сборка мусора от geeksforgeeks и здесь говорится, что:
Метод finalize() никогда не вызывается более одного раза для любого данного объекта.
Итак, здесь сказано "более одного раза", и мне интересно, есть ли вероятность, что метод finalize() не будет вызван, и сборщик мусора уничтожит этот объект.
Является ли это возможным?
1 ответ
Когда ГХ обнаружил объект с классом где finalize()
был переопределен, он добавлен в очередь объектов для вызова finalize() для них. Только после того, как объект был завершен один раз, 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() для этого объекта?
Пока объект находится в очереди завершения, его нельзя удалить.
И вы все предполагали, что в уничтожении объекта сборщиком мусора нет определенности.
Он не будет уничтожен, пока на него все еще есть сильная ссылка.