Обязательно ли метод finalize () будет вызываться каждый раз, когда мы вызываем System.gc () в Java? - PullRequest
0 голосов
/ 29 апреля 2018

Обязательно ли метод finalize() вызываться каждый раз, когда мы вызываем System.gc() явно в Java?

1. Как решить проблемы с сохранением памяти при финализации Java

Я хочу понять выше ссылку

2. Я понимаю, что finalize () не будет вызываться каждый раз, когда мы вызываем System.gc () явно, но теперь возникает вопрос, почему случается так, что иногда его вызывают, а иногда нет? Я думаю, что сделал свой вопрос более ценным.

Ответы [ 3 ]

0 голосов
/ 29 апреля 2018

Нет.

System.gc

Вызов метода gc предполагает , что виртуальная машина Java затратить усилия на переработку неиспользованных предметов, чтобы сделать память, которую они в настоящее время занимают, доступна для быстрого повторного использования.

* завершить 1014 *

Метод finalize никогда не вызывается более одного раза виртуальной машиной Java машина для любого данного объекта.

0 голосов
/ 29 апреля 2018

В этом примере метод finalize () может быть вызван или не вызван. Это полностью зависит от JVM, которая будет вызывать метод finalize. Если вы запускаете эту программу иногда, вы получите результат, иногда нет .. (-, -) Так что испытайте удачу

class Person{  
public int a;
public void finalize(){
    //System.out.println("finalize called"+this.hashCode());
    System.out.println("finalize called"+this.a);
}  
public static void main(String[] args){  
    Person f1=new Person();  
    f1.a=10;
    Person f2=new Person();  
    f1=null;  
    f2=null;  
    System.gc();  
}}
0 голосов
/ 29 апреля 2018

Нет. Не гарантируется, что GC когда-либо произойдет, не говоря уже о System.gc(), не говоря уже о том, что финализаторы когда-либо будут запущены.

теперь вопрос в том, почему случается так, что иногда его вызывают, а иногда нет

Поскольку сборщик мусора и финализация могут выполняться в результате System.gc(): ничто не может остановить это, так что происходит, а если нет, то нет, потому что нет гарантии.

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