【发布时间】:2015-12-31 03:19:18
【问题描述】:
class MyObj {
public void print() {
System.out.println("Hello!");
}
@Override
protected void finalize() throws Throwable {
System.out.println("MyObj Destroyed");
super.finalize();
}
public static void main(String... args) {
MyObj obj = new MyObj();
obj.print();
for (int i = 0; i < 10000000; i++) {
byte[] b = new byte[100];
}
System.out.println("done");
}
}
你好!
MyObj 已销毁
完成了
但是当我把main方法改成这个
public static void main(String... args) {
MyObj obj = new MyObj();
obj.print();
for (int i = 0; i < 10000000; i++) {
byte[] b = new byte[100]; //just create objects to force garbage collector to run
}
obj.print(); //call print here
System.out.println("done");
}
你好!
你好!
完成了
Java 是否会在上次使用时自动将强引用设置为 null?
【问题讨论】:
-
当它不再可达时,当您将调用复制到
for循环之后;在for循环之后可以访问它(因此不符合gc的条件)。 -
一个 reference 是never 准备好进行垃圾回收,但一个 object 是,当它没有实时引用时。 Java 不会在初始化后自动将任何内容设置为 null。