垃圾回收器选项设置

一 垃圾回收器设置

# Serial回收器
-XX:+UseSerialGC 年轻代使用Serial GC, 老年代使用Serial Old GC

# ParNew回收器
-XX:+UseParNewGC 年轻代使用 ParNew GC,不影响老年代。
-XX:ParallelGCThreads=N 设置年轻代并行收集器的线程数,默认开启和 CPU 数量相同的线程数。

# Parallel回收器,JDK 8 默认的垃圾回收器
-XX:+UseParallelGC 年轻代使用 Parallel Scavenge GC,互相激活
-XX:+UseParallelOldGC 老年代使用 Parallel Old GC,互相激活
-XX:ParallelGCThreads 设置年轻代并行收集器的线程数。一般地,最好与 CPU 数量相等,以避免过多的线程数影响垃圾收集性能。
-XX:MaxGCPauseMillis 设置垃圾收集器最大停顿时间(即 STW 的时间),单位是毫秒。
    为了尽可能地把停顿时间控制在 MaxGCPauseMills 以内,收集器在工作时会调整 Java 堆大小或者其他一些参数。
    对于用户来讲,停顿时间越短体验越好;但是服务器端注重高并发,整体的吞吐量。所以服务器端适合 Parallel 进行控制。
    该参数使用需谨慎。
-XX:GCTimeRatio=N 垃圾收集时间占总时间的比例(1 / (N+1)),用于衡量吞吐量的大小
    取值范围(0,100),默认值99,也就是垃圾回收时间不超过1%。
    与前一个-XX:MaxGCPauseMillis 参数有一定矛盾性。暂停时间越长,Ratio 参数就容易超过设定的比例。
-XX:+UseAdaptiveSizePolicy 设置 Parallel Scavenge 收集器具有自适应调节策略。
    在这种模式下,年轻代的大小、Eden 和 Survivor 的比例、晋升老年代的对象年龄等参数会被自动调整,以达到在堆大小、吞吐量和停顿时间之间的平衡点。
    在手动调优比较困难的场合,可以直接使用这种自适应的方式,仅指定虚拟机的最大堆、目标的吞吐量(GCTimeRatio)和停顿时间(MaxGCPauseMills)
### 如何在 JDK 中设置和配置不同的垃圾回收器选项 #### 设置垃圾回收器的一般方法 对于 Java 应用程序来说,可以通过 JVM 参数来选择特定的垃圾回收器。这些参数通常是在启动应用程序时通过命令行传递给 `java` 命令。 例如,在 JDK 8 中,默认垃圾回收器是 Parallel Collector[^1]。要切换到其他类型的垃圾回收器,比如 CMS 或 G1,则需使用相应的标志: - 使用 CMS 收集器:`-XX:+UseConcMarkSweepGC` - 使用 G1 收集器:`-XX:+UseG1GC` ```bash java -XX:+UseG1GC MyApp ``` 这段代码展示了如何指定 G1 Garbage Collector 来运行名为 `MyApp` 的应用程序。 #### 配置 Z Garbage Collector (ZGC) 自 JDK 11 起引入了实验性的 Z Garbage Collector(ZGC),它旨在实现极低延迟的同时处理非常大的堆大小。启用 ZGC 可以这样操作: ```bash java -Xlog:gc -XX:+UnlockExperimentalVMOptions -XX:+UseZGC MyApp ``` 这里 `-Xlog:gc` 启用了详细的 GC 日志记录功能以便于调试与性能优化;而 `-XX:+UnlockExperimentalVMOptions` 和 `-XX:+UseZGC` 则用于解锁并激活 ZGC。 #### 控制 GC 发生频率 除了选择具体的垃圾回收算法外,还可以调整其行为特性之一就是控制发生频率。这可通过设置 `-XX:ZCollectionInterval=<seconds>` 参数完成,其中 `<seconds>` 表示两次连续 GC 执行间的期望时间间隔(秒数)。需要注意的是减少这个值虽然可以使每次 GC 更加及时但也可能导致更高的 CPU 开销[^4]。 ```bash java -XX:ZCollectionInterval=5 MyApp ``` 上述命令使得每五秒钟至少触发一次完整的垃圾收集过程。 #### 自定义垃圾回收策略 根据不同应用场景的需求,可能还需要进一步微调各个阶段的行为模式。例如,在某些情况下希望降低新生代对象晋升老年代的速度,就可以增加年轻代的空间比例或者改变分配担保阈值等措施。 ```bash java -Xms2g -Xmx2g -XX:NewRatio=2 -XX:+UseParallelGC MyApp ``` 这条指令设置了初始堆大小 (`-Xms`) 和最大堆大小 (`-Xmx`) 均为 2GB ,并将新旧两代的比例设为 1:2 (即新生代占总内存容量的三分之一),最后指定了采用并发标记清除型收集方式。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值