JVM

本文深入探讨Java虚拟机中垃圾回收机制的工作原理,包括对象的标记、finalize方法的执行条件及其实现细节,并通过实例展示了对象如何在特定条件下暂时避免被回收。

纯粹是个人学习总结,如有不对的地方请吐槽。

java虚拟机

在操作静态变量方法的时候会先初始化该类

在操作常量时不需要初始化该类,会在编译时将常量放到常量池中。

垃圾回收:

会先标记该对象是否可以回收,然后再遍历判断是否执行finalize()方法

如果需要执行finalize()方法就会调用finalize()方法,但是回收时不会等到finalize()执行完成再回收。

并且finalize()只执行一次

判断finalize()执行的条件:是否重写finalize()方法

对象耍流氓

@Override
protected void finalize() throws Throwable {
    super.finalize();
    System.out.println("嗯,已经执行了finalize()方法了");
    Test.self = this;
}

private static void save() throws Exception {
    self = null;
    System.gc();
    //Finalizer线程优先级比较低,我们稍等一小会
    Thread.sleep(500);
    if (self != null) {
        System.out.println("我还活着");
    } else {
        System.out.println("啊哦,我挂了");
    }
}

打印结果:

嗯,已经执行了finalize()方法了

我还活着

啊哦,我挂了

同样是执行save方法,第一次对象成功拯救了自己,第二次却无法拯救自己,finalize方法也仅仅只被执行了一次而已!

如有雷同并且你介意请联系我

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值