Как метод finalize работает с фантомной ссылкой в ​​Java - PullRequest
2 голосов
/ 16 апреля 2011

Привет, у меня есть одно сомнение по поводу фантомной ссылки. Как я понимаю, метод finalize вызывается как раз перед тем, как объект собирается для сборки мусора. Но иногда, если объект не подходит для сборки мусора, метод finalize не будет выполняться.

Теперь поговорим о фантомной ссылке, когда будет вызван этот метод финализации.

Финализ всегда вызывается в призрачной ссылке.

Я очень смущен по этому поводу. Пожалуйста, помогите мне.

Ответы [ 3 ]

5 голосов
/ 16 апреля 2011

Финализаторы никогда не будут вызываться независимо от того, есть ли фантомная ссылка или нет. Не полагайтесь на финализаторы для какой-либо критической части вашего кода, потому что нет никакой гарантии, что они будут вызваны своевременно или на самом деле вообще.

Многие люди выступают за то, чтобы вы просто никогда вообще не использовали финализаторы, потому что их невероятно сложно использовать правильно.

1 голос
/ 14 октября 2011

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

0 голосов
/ 16 апреля 2011

Finalize будет вызываться всегда, но не обязательно, когда вы этого ожидаете. Может случиться так, что вызов будет сделан только при завершении работы JVM (при условии, что вы не просто убиваете программу). Вы не должны полагаться на finalize() для выполнения значительной работы. Но также полезно внедрить полезную finalize() и включить в нее вызов super.finalize().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...