Java 垃圾收集算法

Java 垃圾收集机制

1.判断一个java对象需要被回收

可达性分析

如果一个对象和gc root节点之间没有任何引用链,那么就判断这个对象不可达

2.垃圾收集算法

2.1 标记-清除算法

在一块内存区域里面,将所有标记为可回收状态的对象进行回收并释放所占用的内存区域。就叫标记清除算法。

标记清除算法的缺点是如果回收的内存区域都是不连续的区域的话,可能导致再为一个大对象进行分配内存时找不到合适的内存,从而导致提前触发下一次的gc。

2.2 复制算法

复制算法的原理是将一块内存区域分成2部分,每次使用的时候只使用其中的一部分,另一部分空闲,当发生gc时,将不需要回收的对象都复制到空闲的内存区域里面,然后对之前的那个区域的内存进行整体回收。

复制算法解决了标记清除算法的缺点。但是他也有自己的缺点,使用复制算法的缺点是内存中始终有一块内存需要作为内存复制的地方而不能利用。

Hotspot虚拟机中新生代就使用了复制算法,他把新生代分为3块:1个eden区和2块survivor区,eden区占新生代的80%空间,2个survivor分别占10%。新生代区域的回收效率一般都很高,有90%以上,所以每次将一个survivor和eden中的内存回收后剩下的不到10%的对象可以放在另一个survivor中。这种策略下内存利用率达到了90%。

如果进行一个gc后剩余的内存要大于survivor的空间,这个时候就可以把这些对象移入老年代。这种分配机制叫做分配担保(handle promotion).

2.3 标记-整理算法

标记整理算法是对标记清除算法的优化。将所有的内存中的对象都往同一个方向移动,消除对象之间的空闲内存,最后清除掉边界之外的内存。老年代使用这种算法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值