目录
1- 引言:
对于 JVM 调优,主要就是调整年轻代、老年代、元空间的内存空间大小及使用的垃圾回收器类型。主要有以下类型
- 设置堆空间大小
- 虚拟机栈的设置
- 年年轻代中 Eden 区和两个 Survivor 区的大小比例
- 年轻代晋升老年代阈值
- 设置垃圾收集器
2- ⭐核心:
2-1 设置堆空间大小
- 设置堆的初始大小和最大大小,为了防止垃圾收集器在初始大小、最大大小之间收缩堆而产生额外的空间,通常把最大、最小设置为相同值。
Xms
:设置堆的初始化大小Xmx
:设置堆的最大大小
堆空间设置为多少合适?
- 最大大小的默认值是物理内存的
1/4
,初始大小是物理内存的1/64
- 堆太小,可能会频繁的导致年轻代和老年代的垃圾回收,会产生 STW ,暂停用户线程
- 堆内存大肯定是好的,存在风险,假如发生了 Full GC,它会扫描整个堆空间,暂停用户线程的时间长
- 设置参考推荐:尽量大,也要考察一下当前计算机其他程序的内存使用情况。
2-2 虚拟机栈的设置
- 虚拟机栈的设置:每个线程默认会开启 1M 内存,用于存放栈帧、调用参数、局部变量等,但一般 256K 就够用。通常减少每个线程的堆栈,可以产生更多的线程,但这实际上还受限于操作系统。
Xss
:对每个线程 stack 大小的调整
- 设置参考推荐:一般设置
256K
或者512K
都是可以的。
2-3 年轻代 Eden 区和两个 Survivor 区的大小比例
- 年轻代中 Eden 区和两个 survivor 区的大小比例
- 设置年轻代中 Eden 区和两个 survivor 区的大小比例,该值如果不设置,则默认比例为 8:1:1。通过增大Eden 区的大小来减少 YGC 发生的次数,但有时我们发现,虽然次数减少了,但 Eden 区满的时候,由于占用的空间较大,导致释放缓慢,此时 STW 的时间较长,因此需要按照程序情况去调优。
-XXSurvivorRatio=8
2-4 年轻代晋升老年代阈值
-XX:MaxTenuringThreshold=threshold
- 默认为 15
- 取值范围为 0-15
2-5 设置垃圾回收器
- 设置垃圾回收收集器
通过增大吞吐量提高系统性能,可 ,可以通过设置并行垃圾回收收集器。
-XX:+UserParallelGC
-XX:+UserParalleOldGC
--XX:+UserG1GC