jvm对象回收

对象存活判断方法

jvm垃圾自动回收主要工作区域是java的堆内存,在进行内存回收时,如何判断哪些内
存区域可以回收呢?主要由以下两种方式

1、引用计数法

引用计数法的实现方式为:为每一个对象添加一个引用计数器,每被引用一次计数器就加1;当引用失败计数器就减1;任何时刻计数器为0的对象就是不可再被使用的。引用计数器实现方式简单,效率高,但是无法解决循环引用的问题。

2、可达性分析算法

可达性分析的实现方式为:通过一系列成为GC Roots的对象作为起始点,以这些对象为根开始向下搜索,搜索路径称为引用链,当对象和任何一个引用链都没有相连时,称这个对象是不可用的即可被回收。

可作为GC Roots的对象包括以下几种:

  • 虚拟机栈中引用的对象
  • 方法区中类静态属性引用的对象
  • 方法去中常量引用的对象
  • 本地方法栈中JNI(native方法)引用的对象

垃圾收集算法

1、标记-清除算法

标记清除算法分为两个步骤标记和清除,首先标记出哪些对象是可回收的,第二步是将标记出来可回收的对象进行回收。该算法的不足之处:一是效率问题,标记和清除效率都不高;二是空间问题,清除后会产生大量的空间碎片

2、标记-整理算法

标记整理算法分为两个步骤标记和整理,首先标记出哪些对象是可回收的,第二步时将标记出来可回收的对象进行整理,让所有存活的对象都向一端移动,直接清除掉端边界以外的对象。

3、复制算法

复制算法的实现思路是:将内存分为大小相等的两块,当其中一块内存用完了,将还存活的对象复制到另外的一块内存上,将该块内存上的对象都清除。该方法避免了空间碎片的问题,实现简单,但是要把内存缩小为原来的一半。

4、分代收集算法

分代收集算法的实现思路是:新生代对象存活时间短采用复制算法,以少量的存活对象复制成本完成收集;老年代对象存活时间长,使用标记-整理或标记清除的方式进行对象收集

参考资料:《深入理解java虚拟机 JVM高级特性及最佳实践》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值