浅谈JAVA垃圾回收机制及其回收时机

本文介绍了Java的垃圾回收机制,包括如何判断对象死亡的可达性分析算法,垃圾回收的简要过程,方法区的回收标准,常用的垃圾回收算法,以及新生代和老年代的GC方式。还探讨了对象分配、空间分配担保等概念。
摘要由CSDN通过智能技术生成

        众所周知,Java与C++相比有一个明显的不同就是:Java拥有自动垃圾回收机制,而C++的垃圾回收则完全由程序员自己手动完成,这不仅对程序员本身素质有一定的要求,还提高了内存泄漏的风险。
        以下内容参考《深入理解Java虚拟机》一书,经过自己理解整理而来,欲知完整全面的内容,请参看原著。

如何判断一个对象已经“死亡”

        首先,我们需要知道JVM如何判断一个对象已经“死亡”了,答案是:可达性分析算法。
        此算法的基本思想是:通过一系列的被称为“GC Roots”的对象作为起点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,如果某个对象到GC Roots不与任何引用链相连,则表示此对象不可用。
        在Java中,GC Roots对象包括以下几种:

  • 局部变量表中引用的对象(方法中的参数,方法体中的局部变量);
  • 方法区中类静态属性引用的对象(static);
  • 方法区中常量引用的对象(final static);
  • 本地方法栈中JNI引用的对象(native方法)。

        从上面的范围我们可以看出来,基本上除了成员变量引用的对象外,其余引用对象的方式均可作为GC Roots。

垃圾回收简要过程

        这里必须点出一个很重要的误区:不可达的对象并不会马上就会被直接回收,而是至少要经过两次标记的过程。
  

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值