S++

千线一眼

导航

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

posted on 2022-05-09 21:02  S++  阅读(35)  评论(0)    收藏  举报