JVM-垃圾回收(4)
GC调优
确定目标
首先要确定项目的目的在于【低延迟】还是【高吞吐量】
比如互联网项目要求的是低延迟高响应,而科学计算之类的项目则要求高吞吐量。
- CMS、G1、ZGC(低延迟可选)
- ParallelGC(高吞吐可选)
最快的GC是不发生GC
如果一个程序发生过于频繁的GC,那么就应该考虑以下几点:
- 是否是自己的代码加载了过多不必要的数据(比如操作数据库的时候一次性读取一大张表之类的操作)
- 数据表示是否太臃肿
- 对象图
- 对象大小
- 是否发生内存泄漏
新生代调优
新生代的特点
- 所有new操作的内存分配都非常廉价
- 死亡对象的回收代价是零
- 大部分对象用完即死亡
- Minor GC时间远低于Full GC
内存设置推荐
- 新生代能容纳所有【并发量*(请求-响应)】数据
- 幸存区要求能保留【当前活跃对象+需要晋升对象】
老年代调优
老年代调优规则
以CMS为例
- CMS的老年代内存越大越好
- 先尝试不做调试,先尝试调优新生代
- 观察发生Full GC时老年代占用的内存,将老年代预设的内存调大1/4~1/3
- -XX:CMSInitiatingOccupancyFraction=percent
浙公网安备 33010602011771号