JVM垃圾回收器和回收算法

JVM垃圾回收三种算法

  1. 标记清理算法 


    标记清理算法,将堆内不在被使用的对象标记为垃圾对象,然后直接清理掉垃圾对象。
    该算法的实现简单,但是容易产生内存碎片。
     
  2. 复制算法

    复制算法,将堆内空间分成两个部分,一半的空间预留给整理活对象使用。将堆内不在被使用的对象标记为垃圾对象,然后将存活的对象复制到另外一半的空间中。
    该算法内存只利用了一半,内存使用率不高,但是整理的效率高。
     
  3. 标记整理算法

    标记整理算法,为了减少碎片和不浪费内存空间,将堆内不在被使用的对象标记为垃圾对象,清理掉垃圾对象,并且整理存活的对象。

JVM7种垃圾回收器

  1. 7种垃圾回收器:
    新生代:Serial、 ParNew、Parallel Scavenge、老年代:CMS、 Serial Old 、Parallel Old、新生代+老年代:G1。
    7种垃圾回收的搭配使用如下图:

    其中,PS+PO 和PN+CMS 常用的两种组合方式。
     
  2. 可以设置JVM参数来进行垃圾回收器的搭配使用
    1. -XX:+UseSerialGC(年轻代:Serial +  老年代:Serial Old
    2. -XX:+UseParNewGC(年轻代: Parallel Scavenge + 老年代:Serial Old)
    3. -XX:+UseParallelGC或-XX:+UseParallelOldGC(年轻代: ParNew + 老年代:ParallelOld)是常用的一种JVM垃圾回收组合方式。
    4. -XX:+UseConcMarkSweepGC(年轻代: ParNew + 老年代:CMS +Serial Old)也是一种常用的JVM垃圾回收组合方式
    5. G1

      垃圾回收第一个阶段Young Collection 

      1、在新生代时,会触发进行GC roots 直接关联的存活对象的初始标记;

      2、新生代内存紧张,就会执行垃圾回收操作,然后把新生代幸存的对象复制到幸存区;

      3、当幸存区比较紧张时,触发垃圾回收操作,将幸存区中存活久的对象晋级到老年代,旧的幸存区中的存活对象和新生代存活的对象会被复制到新的幸存区中;
       

      垃圾回收第二个阶段 Young Collection + CM 

      当老年代总的堆空间的比例达到阈值时,会进行并发标记;

      垃圾回收的第三个阶段:Mixed Collection

      在进行老年代垃圾回收的时候,为了使得STW的时间小于MaxGCPauseMillis这个目标,不是所有的老年代都发生拷贝,只会回收那些垃圾最多的老年代区域。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值