JVM垃圾回收机制

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之后版本静态变量就放在堆里了,它和虚拟机直接打交道,所以可以卸载虚拟机来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值