type
status
date
slug
summary
tags
category
icon
password
Java虚拟机(JVM)提供了丰富的调优参数,帮助开发者和系统管理员优化应用程序的性能、内存使用和垃圾回收(GC)行为。通过调整这些参数,可以在不同的硬件和应用场景中达到最佳的性能和稳定性。本文将介绍JVM调优的主要参数,包括内存管理参数、垃圾回收参数、性能监控参数等。
一、内存管理参数
内存管理参数主要用于配置JVM堆内存和非堆内存的大小、结构及其行为。
1. 堆内存设置
- 初始堆内存大小(-Xms):设置JVM启动时堆内存的初始大小。例如:
- 最大堆内存大小(-Xmx):设置JVM堆内存的最大大小。例如:
2. 新生代和老年代大小设置
- 新生代大小(-Xmn):设置新生代的大小。例如:
- 新生代比例(-XX):设置新生代与老年代的比例。例如:
这表示老年代的大小是新生代的两倍。
- Eden区与Survivor区比例(-XX):设置Eden区与Survivor区的比例。例如:
这表示Eden区的大小是一个Survivor区的八倍。
3. 持久代和元空间设置(JDK 8及以后)
- 初始元空间大小(-XX):设置初始元空间大小。例如:
- 最大元空间大小(-XX):设置元空间的最大大小。例如:
二、垃圾回收参数
垃圾回收参数用于配置JVM的垃圾回收器和相关行为,以优化内存回收效率和停顿时间。
1. 选择垃圾回收器
- 串行收集器(Serial GC):适用于单核或小内存环境。
- 并行收集器(Parallel GC):适用于多核环境,注重吞吐量。
- CMS收集器(Concurrent Mark-Sweep GC):适用于低延迟需求的应用。
- G1收集器(Garbage First GC):适用于大内存、低停顿需求的应用。
2. 并行收集器参数
- 并行GC线程数(-XX):设置并行GC的线程数。例如:
- 年轻代GC线程数(-XX):设置并行收集器在年轻代收集时使用的线程数。例如:
3. CMS收集器参数
- CMS初始化标记时间(-XX):设置老年代空间使用率达到多少时触发CMS垃圾回收。例如:
表示老年代使用率达到75%时触发CMS回收。
- 关闭类卸载(-XX:+CMSClassUnloadingEnabled):CMS垃圾回收时是否进行类卸载。例如:
4. G1收集器参数
- 最大停顿时间(-XX):设置垃圾回收的最大停顿时间。例如:
- G1HeapRegionSize:设置G1收集器的堆区域大小。例如:
三、性能监控参数
性能监控参数用于启用JVM的性能监控和日志记录功能,帮助开发者分析和优化应用性能。
1. 启用GC日志
- 基本GC日志:
- 详细GC日志:
- GC日志文件输出:
2. 类和方法的性能监控
- 启用类加载日志:
- 启用类卸载日志:
3. JVM性能分析工具
- JVM性能分析工具(JFR, Java Flight Recorder):
- JVM性能分析工具(JVM TI, Java Virtual Machine Tool Interface):用于连接外部性能分析工具,如VisualVM或JConsole。
四、其他常用参数
1. 设置线程栈大小
- 线程栈大小(-Xss):设置每个线程的栈大小。例如:
2. 禁用显式GC调用
- 禁用System.gc()调用:
3. 预热编译器
- JIT编译器优化:表示方法调用达到1000次后触发JIT编译。
总结
JVM提供了多种调优参数,涵盖内存管理、垃圾回收、性能监控等方面。通过合理配置这些参数,可以有效提升Java应用的性能和稳定性。在实际应用中,根据具体的硬件环境和应用需求,选择和调整合适的参数是关键。定期进行性能监控和分析,并结合应用特性进行调优,能够最大程度地发挥JVM的性能潜力。
- 作者:奥利弗
- 链接:https://www.aolifu.org/article/jvm_optimized_param
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。