java GC分析与调优

本文介绍了Java的GC参数设置,如-Xms和-XX:CMSInitiatingOccupancyFraction,以及堆内存结构,包括年轻代、老年代和持久代。详细阐述了不同类型的GC(Young GC、CMS GC、Full GC)触发条件,并强调了适当调整GC参数以优化性能的重要性。同时,提到了使用jstat命令来监控GC回收情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. JVM的GC参数:

-Xms : 初始堆大小6G

-XX : CMSInitiatingOccupancyFraction=65 :年老代空间使用率到65%就执行CMS GC。从70调整为65,让old区尽早的进行回收,可以保证年老代能及时回收垃圾,保证空间充足可以接纳新声代对象。

2.堆内存heap

年轻代(Young Generation)、老年代(Old Generation)和持久代(Permanent Generation)

(1)年轻代:

     所有新生成的对象首先都是放在年轻代的。年轻代的目标就是尽可能快速的收集掉那些生命周期短的对象。 一个eden区,两个Survivor区(一般而言)。大部分对象在Eden区中生成。

(2)年老代:

     在年轻代中经历了N次垃圾回收后仍然存活的对象,就会被放到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象。

(3)持久代:

     用于存放静态文件,如今Java类、方法等。

2.内存回收触发:

(1)Young GC:

     条件:eden满了。只整理回收young gen

(2)CMS GC:全称 Concurrent Low Pause Collector

     条件:old Gen的使用率大于一定的比率,默认为92%。在并发模式工作的时候只整理回收old gen。

(3)Full GC:(Full GC很影响系统性能)

     条件:

     年老代满了;

     持久代满了;

     【CMS GC出现promotion failed(年轻代晋升到年老代空间不足)和concurrent mode failure(并发失败)。Full GC将对整个堆进行整理。 】

另外:年轻代满了的Y GC又称为Minor GC。年老代满了的Full GC又称为Major GC。

总之:

因为young GC只收集young gen,但full GC会收集整个GC堆。 

HotSpot VM的full GC会收集整个Java堆,包括其中的young gen与old gen;同时也会顺便收集不属于Java堆的perm gen。 

Young + old + perm构成了HotSpot VM的整个GC堆。至少目前还是这样。 

(JDK8里的HotSpot VM就没有perm gen了。请注意。) 

CMS在并发模式工作的时候是只收集old gen的。但一旦并发模式失败(发生concurrent mode failure)就有选择性的会进行全堆收集,也就是退回到full GC。 

如果young gen太小,每次满了就触发一次young GC。

即:young gen满了,就会触发young GC。 old gen满了,就会触发CMS GC。

 

3. 查看回收情况:

jstat命令:

查看GC:

sudo jstat -gcutil resin进程号 1000 -1

字段含义:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值