赞
踩
启动G1垃圾回收器:-XX:UseG1GC
可以设置region的大小:-XX:G1HeapRegionSize
"大小默认是堆区的1/2000,可以设置的范围是1~32MB之间"
设置期望达到的最大GC停顿时间指标(不保证一定达到):-XX:MaxGCPauseMillis
*并行+并发,*分代+分区(region)
*标记压缩
低延迟
*每个region都具有记忆集(Remember Set):避免全局扫描,
jdk7出现,jdk9默认开启
*作用于老年代,新生代
新生代(Eden,S0,S1),老年代(O区),大对象存储区(H区)
1.初始化标记阶段:标记出GC Roots能直接关联对象
2.根区域扫描:扫描并标记S区到达O区的对象,在Young GC前完成
3.并发标记:和应用程序并发执行,发现区域中的对象全是垃圾则这个区域会进行回收
4.再次标记:修正并发标记时用户程序继续运作而导致标记产生变动的对象
5.清除阶段:清除掉标记已经判断死亡的对象,释放内存空间,是部分并发的
回收过程:
1.年轻代GC(Young GC):并行(独占式),从年轻代区间移动存活的对象到survivor区或者老年代两个区间中
2.老年代进行并发标记(Concurrent Marking):当堆内存使用率达到45%时,开始执行并发标记过程
3.混合回收(Mixed GC):回收全部年轻代和部分老年代,老年代中的存活对象会被转移到老年代的空闲区间,然后根据垃圾价值进行回收
4.Full GC:当用户线程制造垃圾的频率远大于region回收的速度时触发Full GC(独占式,单线程)
1.低延迟
2.使用标记压缩没有内存碎片
3.可预测的停顿时间模型(软实时):能够根据region里的垃圾堆积的价值进行回收,优先回收价值最大的,能够提高收集效率
1、记忆集RememberSet会占用比较大的内存,因此不建议在小内存下使用G1,推荐至少6G
2、对CPU的负载可能会更大一点
3、由于采用复制算法,GC垃圾回收过程对象复制转移会占用较多的内存,更容易出现回收失败的问题
4、可能会降低吞吐量
1.堆中超50%过是活动的数据
2.对象分配和晋升频率很大
3.GC停顿时间过长:大于0.5~1S
1.启动CMS垃圾收集器:+UseConcMarkSweepGC
2.设置堆内存使用率的阈值:-XX: CMSInitiatingoccupanyFraction
3.指定在执行完FullGC后对内存空间进行压缩整理:-XX:+UseCMSCompactAtFullcollection
4.设置在执行多少次Full cC后对内存空间进行压缩整理:-XX:CMSFullGCsBeforeCompaction
5.设置CMS的线程数量:-XX:ParallelCMSThread
*并发,*分代
低延迟
*标记清除
jdk1.5出现jdk14移除
作用于年轻代
1.初始标:标记出GC Roots能直接关联对象
2.并发标记:从GC Roots的直接的关联对象开始遍历整个对象图的过程
3.重新标记:修正并发标记时用户程序继续运作而导致标记产生变动的对象
4.并发清除:清除掉标记已经判断死亡的对象,释放内存空间
1.并发
2.低延迟
1.空间使用率较低:使用标记清除会产生内存碎片
2.需要空间预留:一边处理垃圾,一边处理用户线程
1.关注服务的响应速度,希望停顿时间更短
2.CMS不是独占的回收器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。