JVM垃圾回收算法——分代收集算法

当前虚拟机的垃圾回收算法基本都采用“分代收集算法”,这种算法并没有什么新的思想,主要是基于对象的存活周期进行了分类。
对象存活周期分类:
新生代:朝生夕死的对象(死亡率达到90%以上,例如:方法的局部变量等; (细分为:eden,Survivor from,Survivor To)
老年代:存活得比较久,但还是要死的对象(例如:缓存对象、单例对象等)。
永久代:对象生成后几乎不灭的对象(例如:加载过的类信息)。
内存区域:
新生代和老年代位于java堆内存中,永久代位于方法区;
垃圾回收:
在新生代中每次回收都有大批死亡的对象需要回收,采用复制算法,由于存活对象数量少,降低了复制的成本,由于新生代对象存活率低,所以一般不需要新生代50%作为空闲区域,而是eden区为80%,作为给新生对象分配内存,from区10%,to区10%,每次发生GC时,只需要把eden和其中一块Survivor中存活的对象复制到另一块Survivor中,释放回收后的90%内存;
在这里插入图片描述
老年代:由于老年代中的对象存活率较高,并且没有额外的空间进行分配担保,即采用“标记-清理”或者“标记-清除”算法进行低频长时间的GC;
方法区对象回收:永久代指的是虚拟机内存中的方法区,永久代垃圾回收比较少,效率也比较低,但也必须进行垃圾回收,否则永久代内存不够用时仍然会抛出OutOfMemoryError异常。永久代也使用“标记-清除”或者“标记-整理”算法进行垃圾回收。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值