jvm垃圾收集策略

 垃圾回收对象主要针对是年轻代和老年代,老年代的内存空间比年轻代的内存空间大,所以我们应该避免进行老年代的内存空间的垃圾回收。

1.年轻代GC回收的策略

    算法思想:复制

    实现过程:从根集合出发,扫描出存活的对象,并且把存活对象复制到一块新的内存空间。

    算法的优化:因为Eden会产生大量的对象,为了加快内存的分配速度,实行Bump-The-Pointer技术,每一次记住最后一个保存的对象,这样就能够计算出Eden空间。因为堆的内存空间是线程共享的,所以会产生线程问题,这样的话,我们就把Eden分割为多个数据区。

    串行GC:  适用于单cpu,过程就是,扫描出存活对象,经过MinorGC后,将存活对象复制到存活区1和存活区2,经过几次MinorGc后,将对象放到老年代。但是STW(线程暂停)时间比较长      

    并行回收GC:  适用于多cpu,扫描和复制使用多线程进行的,适用于暂停时间比较短的应用。

    并行GC:  适用于多cpu,它要求和老年代的并发GC已经使用。

2. 老年代的GC回收的策略

      算法思想:标记-清除

      实现过程:从根集合出发,对存活的对象进行标记,标记完成后,对没有进行标记对象进行回收。

      算法的优化:标记-清除,容易产生内存碎片,所以使用标记-清除-压缩,把标记对象向回收空间移动,这样的话,会带来解决内存碎片问题,但是会带来性能问题。

     串行GC:适用于单cpu,过程就是,标记出存活对象,标记完成后,回收没有标记的对象,再把存活对象向都集中在一端,然后把回收的内存变为连续的内存空间。

     并行GC:适用于多cpu,老年代的内存空间比较大,把老年代分割为多个内存空间,使用多线程进行处理。

     并发GC(CMS Concurrent-Mark-Sweep):在并发GC里面会暂停整个应用的是:初始标记和重新标记,这样对整个应用程序影响比较小,但是它在并发标记和回收线程与应用线程抢占cpu资源,容易产生内存碎片。

如何理解并发Gc?

假设现在需要打扫教室,开始让班里面同学都出去,然后对垃圾进行标记,进行清除,但是这时候让同学进来的时候,他们可能继续产生垃圾,这时候需要重新标记,再一次进行清除。

jvm里面的垃圾回收策略:我们一般使用默认情况就可以了(服务器模式:年轻代:并行回收GC.老年代:并行GC),也可以进行调整,自己可以记性百度。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值