gc回收机制
瞅瞅jvm怎么回无用的垃圾
public class test1 {
public static void main(String[] args) {
MyClass mc = new MyClass(); //0x000A01
//让MyClass在堆中的空间,没有引用,然后就会被回收
mc = null;//没有被引用
System.gc();
}
}
class MyClass{
@Override
protected void finalize() throws Throwable {
System.out.println("我要死了");
super.finalize();
}
}
对象就被finalize标记,在回收队列中排队等待被带走,彻底清除。就像排队在喝孟婆汤。
但有办法把它救出来,不让它转世
class SuperMan{
static MyClass mc;
}
class MyClass{
@Override
protected void finalize() throws Throwable {
SuperMan.mc=this;//已经被标记了,正要说遗言的时候,被引用为了静态的对象了,它被引用了,但内存认为它已经被认为它是垃圾了,所以它可能永久飘在了内存里,不被回收。
super.finalize();
}
}
1.8之前的版本,在元数区里,完完了,永远在内存里
1.8之后版本静态变量就放在堆里了,它和虚拟机直接打交道,所以可以卸载虚拟机来解决。