【JVM GC核心参数】JVM原理,JAVA 各种垃圾回收器的核心参数,JAVA GC回收器参数配置,核心参数说明
【JVM GC核心参数】JVM原理,JAVA 各种垃圾回收器的核心参数,JAVA GC回收器参数配置,核心参数说明
一、在介绍垃圾回收器参数之前,我们看看各个垃圾回收器GC使用的是什么垃圾回收算法:
序号 | 垃圾回收器名称 | 单线程还是多线程 | GC算法 | 参数 |
1 | Serial | · 单线程 · 会STW · Client模式使用 · 新生代回收器 | 复制算法 | |
2 | ParNew垃圾收集器 | · 多线程 · serial的多线程版本 · 默认开启的收集线程数与CPU数量相同 · 新生代回收器 · 追求尽量少的停顿时间 | 复制算法 | |
3 | Parallel Scavenge垃圾收集器 | · 多线程 · 新生代回收器 · 追求cpu吞吐量
| 复制算法 |
|
4 | Serial Old垃圾收集器 | · 单线程 · 老年代垃圾回收器 | 标记-整理算法 | |
5 | Parallel Old垃圾收集器 | · 多线程 · 老年代垃圾回收器 · Parallel Scavenge的老年代版本 · 追求cpu吞吐量 · 会STW | 标记-整理算法 | |
6 | CMS垃圾收集器(Concurrent Mark Sweep) | · 多线程 · 追求最短停顿时间 · 用户线程和gc线程不停切换,有不小开销 · 老年代垃圾回收器 · java 9 已经去掉了cms 初始标记 - STW 并发标记 重新标记 - STW 并发清理 | 标记-清除算法 | cms的缺点: · 吞吐量低 · 无法处理浮动垃圾,导致频繁Full GC · 使用"标记-清除"算法产生碎片空间 cms full gc的由来: 用户线程需要在老年代中分配内存时发现空间不足,就需再次发起Full GC,而此时CMS正在进行清除工作,因此此时只能由Serial Old临时对老年代进行一次Full GC.
|
7 | G1 | · 老年代垃圾回收器 分区域回收 根据
| 多线程 | · G1(Garbage First)是一个横跨新生代和老年代的垃圾回收器 · 它会优先回收死亡对象较多的区域。这也是G1名字 的由来。 · fullgc 特别慢!很多阶段都是 STW 的,所以有了 ZGC! |
8 | ZGC | 大内存 |
二、
Java虚拟机(JVM)中的垃圾回收器是负责管理和回收Java堆内存中不再被应用程序使用的对象的重要机制。不同的垃圾回收器有不同的特点和核心参数。以下是几种常见Java垃圾回收器的核心参数概述:
1. 串行垃圾回收器(Serial GC)
- 核心参数:
- 无特定核心参数,因为它主要依赖于JVM的默认行为。
- 可以通过
-XX:+UseSerialGC
启用串行垃圾回收器。
2. 并行垃圾回收器(Parallel GC)
- 核心参数:
-XX:+UseParallelGC
:启用并行回收垃圾器。-XX:ParallelGCThreads
(:毫秒设置),垃圾但这收集只是一个时目标使用的,线程JVM数会,尽力默认为CPU核心数。-XX:MaxGCPauseMillis
:设置垃圾收集器的最大停顿时间目标达到但不保证。-XX:GCTimeRatio
:设置垃圾收集时间与应用时间的目标比率,例如9
表示垃圾收集时间占应用时间的1/10。
3. 并发标记清除垃圾回收器(CMS GC)
- 核心参数:
-XX:+UseConcMarkSweepGC
:启用CMS垃圾回收器。-XX:CMSInitiatingOccupancyFraction
:设置老年代使用多少比例后开始CMS回收,默认值为JDK版本相关,JDK 5及之前为68%,JDK 6及之后为92%。-XX:+UseCMSInitiatingOccupancyOnly
:仅使用设置的CMS触发百分比。-XX:+CMSClassUnloadingEnabled
:允许在CMS回收期间卸载类。-XX:+CMSPermGenSweepingEnabled
(在JDK 8之前):允许在CMS回收期间回收永久代(元空间之前的版本)。
4. G1垃圾回收器(G1 GC)
- 核心参数:
-XX:+UseG1GC
:启用G1垃圾回收器。-XX:MaxGCPauseMillis
:设置垃圾收集的最大停顿时间目标(毫秒),G1会尽量满足此目标。-XX:InitiatingHeapOccupancyPercent
:设置触发标记周期的Java堆占用率阈值,默认值是45%。-XX:G1NewSizePercent
:新生代最小值,默认值5%。-XX:G1MaxNewSizePercent
:新生代最大值,默认值60%。-XX:G1HeapRegionSize
:设置G1垃圾收集器Region大小,取值范围应为1MB到32MB,且应为2的N次幂。-XX:G1ReserverPercent
:G1为分配担保预留的空间比例,默认10%。
注意事项
- 上述参数仅列举了部分核心参数,每种垃圾回收器都有许多其他可配置参数。
- 参数的具体效果和默认值可能会随JVM版本的不同而有所变化。
- 在实际使用中,应根据应用程序的具体需求和服务器配置来选择合适的垃圾回收器和调整相应的参数。
- 对于复杂的生产环境,建议进行充分的基准测试和性能评估来找到最佳的垃圾回收器配置。
综上所述,Java提供了多种垃圾回收器供选择,每种回收器都有其独特的核心参数,通过合理配置这些参数,可以优化Java应用程序的性能和资源利用率。