携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第49天,点击查看活动详情
优化策略使用
本质上是减少Full GC的次数(Minor GC很快基本不会有影响)
- 第一个问题既是目前年轻代、年老代分别使用什么收集器;
- 针对不同的收集器,进行优化:串行改并行、针对目前的Head对象情况,根据实际场景设置SurvivorRatio与NewRatio;
- 根据对象回收情况,判断是否需要压缩,减小碎片化。
如果是频繁创建对象的应用,可以适当增加新生代大小。常量较多可以增加持久代大小。对于单例较多的对象可以增加老生代大小。比如spring应用中。
GC选择,在JDK5.0以后,JVM会根据当前系统配置进行判断。一般执行-Server命令便可以。gc包括三种策略:串行,并行,并发(使用CMS收集器老年代)。
吞吐量大的应用,一般采用并行收集,开启多个线程,加快gc的速率。 响应速度高的应用,一般采用并发收集,比如应用服务器。 年老代建议配置为并发收集器,由于并发收集器不会压缩和整理磁盘碎片,因此建议配置: -XX:+UseConcMarkSweepGC #并发收集年老代 -XX:CMSInitiatingOccupancyFraction=80 # 表示年老代空间到80%时就开始执行CMS -XX:+UseCMSInitiatingOccupancyOnly #是阀值生效 -XX:+UseCMSCompactAtFullCollection#打开对年老代的压缩。可能会影响性能,但是可以消除内存碎片。 -XX:CMSFullGCsBeforeCompaction=10 # 由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此参数设置运行次FullGC以后对内存空间进行压缩、整理。