首页 > 试题广场 >

以下代码运行的结果是什么 public class T...

[单选题]
以下代码运行的结果是什么
public class TestGC {
    private static TestGC TEST_GC = null;
    private void isAlive() {
        System.out.print("Yes,I'm Alive!" + "、");
    }
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.print("finalize mehtod executed!" + "、");
        TestGC.TEST_GC = this;
    }
    public static void main(String[] args) throws Throwable {
        TEST_GC = new TestGC();
        TEST_GC = null;
        System.gc();
        Thread.sleep(500);
        if (TEST_GC != null) {
            TEST_GC.isAlive();
        } else {
            System.out.print("NO,I'm dead!" + "、");
        }
        TEST_GC = null;
        System.gc();
        Thread.sleep(500);
        if (TEST_GC != null) {
            TEST_GC.isAlive();
        } else {
            System.out.print("NO,I'm dead!");
        }
    }
}

  • finalize mehtod executed!、Yes,I'm Alive!、NO,I'm dead!
  • NO,I'm dead!、NO,I'm dead!
  • finalize mehtod executed!、Yes,I'm Alive!、finalize mehtod executed!、Yes,I'm Alive!
  • finalize mehtod executed!、Yes,I'm Alive!、finalize mehtod executed!、NO,I'm dead!
finalize()的功能 : 一旦垃圾回收器准备释放对象所占的内存空间, 如果对象覆盖了finalize()并且函数体内不能是空的, 就会首先调用对象的finalize(),  然后在下一次垃圾回收动作发生的时候真正收回对象所占的空间.

finalize()有一个特点就是: JVM始终只调用一次. 无论这个对象被垃圾回收器标记为什么状态, finalize()始终只调用一次. 但是程序员在代码中主动调用的不记录在这之内.
发表于 2022-05-10 19:09:05 回复(0)
对象只会自救一次
发表于 2021-08-02 00:31:36 回复(0)