jvm 垃圾收集器(G1)


jvm 垃圾收集器(G1)

 

 

***************************

G1 简介

 

      

g1垃圾收集器对整个堆内存进行垃圾回收,将堆内存划分为多个 region,保留了新生代老年代的概念,有如下特点:

并行性:垃圾回收时,多个垃圾回收线程可同时运行

并发性:垃圾回收时,用户线程、垃圾回收线程可同时工作

空间整理:垃圾回收时,会进行对象移动,避免了空间碎片

可预见性:维护垃圾回收优先列表(回收空间、回收所需时间),优先对回收价值较大的region进行回收,停顿时间可控

 

 

***************************

垃圾回收过程:新生代垃圾回收、并发标记周期、混合回收、full gc

 

********************

新生代垃圾回收

 

      

新生代垃圾回收主要对eden、survivor进行垃圾回收;

垃圾回收前后,eden区清空survivor区也会回收部分空间

由于新生代的对象可能会进入老年区,老年区可能会增多

 

********************

并发标记周期

 

      

初始标记:标记从根节点直接可达的对象,在初始标记前会触发新生代垃圾回收,初始标记时用户线程停止运行

根区域扫描:标记survivor区直接可达的老年代对象,由于年轻代gc会改变survivor,因此这一阶段年轻代gc停止,但是用户线程可以正常工作

并发标记:扫描整个堆的存活对象并标记,此时可以进行年轻代gc,用户线程可以正常工作

重新标记:由于并发标记阶段用户线程可以运行,重新标记对标记结果进行修改,在重新标记前创建快照,加快重新标记进度,此时用户线程停止

独占预清理:按可回收空间大小对各区域进行排序并标记,供混合回收阶段回收,此时用户线程停止

并发清理:对没有存活对象的区域进行回收(若有存活对象则不回收,大部分回收在混合回收阶段进行)

 

      

eden区:初始标记前进行年轻代gc,eden被清空,由于回收期间用户线程可工作,并发标记周期后,仍会有eden区被使用;

G区:混合回收阶段被回收的区域

 

********************

混合回收阶段

 

      

并发标记周期会回收部分空间,大部分的垃圾回收工作会在混合回收阶段进行;

混合回收不一定回收全部标记为g的区域,只会优先回收可获得最大内存的几个区域

存活的对象会移动到其他空间,减少了空间碎片

 

            

混合回收会执行多次,直到回收足够的内存空间,然后触发新一次的年轻代gc,并发标记周期

 

 

full gc 触发条件

新生代回收阶段:新生代、老年代没有足够空间存储存活的对象

混合回收阶段:无法回收足够的内存空间存储对象

 

 

***************************

相关参数

 

-XX:+UseG1GC:使用g1垃圾收集器

-XX:MaxGCPauseMillis=value:gc停顿的最长时间

-XX:ParallelGCThreads=value:垃圾回收线程数

-XX:InitiatingHeapOccupancyPercent=value:堆使用率达到设定值时,触发并发标记周期,该值过大容易引发full gc,过小会频繁触发并发标记周期,该值默认为45

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值