GC优化基础
调整堆大小
如果在FULL GC系统进行了交换,停顿时间会增长几个数量级,OS
如果G1 GC和后台进程处理堆,将会出现等待数据从磁盘复制到主内存时间较长,速度和下降并且并发模式可能失效
linux 关闭交换区
swapoff -a
linux默认 512M 适用于大多数应用,如果我们不了解参数配置则不应该调整(know-well)
除非应用程序需要更大的堆,否则优化GC算法的性能目标而不是调整堆大小@know what that mean?
调整分代大小
确定了堆的大小JVM就需要将多少分配给新生代
代的不同大小的性能含义:程序运行时的平衡点—架构能力
如果新生代大,YGC停顿时间会增加,回收频率会减低
老年代小,填满的概率搞,FULL GC,STW停顿时
设置新生代和老年代的比例 默认值2
-XX:NewRatio=N
新生代初始大小=堆的初始大小 / (1 + NewRatio)
-Xmx512m -Xms512m -XX:NewRatio=2
512 / (1 + 2) = 170M 初始大小公式实例
设置新生代的初始值,新生代初始大小是对的33%
-XX:NewSize=N
设置新生代的最大值
-XX:MaxNewSize=N
-XmnN
将NewSize和MaxNewSize设置为同一个值的简单写法
JVM如何调整应用程序内空间大小
XX:+PrintAdaptiveSizePolicy
在堆的总体大小内,各个代的大小由分配新生代的空间多少控制
调整元空间大小
当JVM加载类必须记住这些类的某些元数据,这些数据单独占据了一个空间叫作元空间。
控制并行
除了Serial回收器,其他GC算法都使用多线程技术
-XX:ParallelGCThreads=N 这个标志的影响范围
8 + ((N - 8) * 5 / 8)
-XX:+UseParallelGC 新老年代的回收