2026/10/22 17:06:35

--JVM调优参数设置 --jvm垃圾回收器

--JVM调优参数设置 --jvm垃圾回收器 第一章 走进JVM的世界之 了解JVM基础文章目录第一章 走进JVM的世界之 了解JVM基础一、JVM是什么二、常见的JVM调优方法1.选择合适的垃圾回收器2.调整堆内存大小3.调整新生代和老年代的比例4.启用或禁用某些垃圾回收器参数5.使用线程池6.避免对象的频繁创建和销毁三、JVM调优参数设置1. 堆内存大小-Xms和-Xmx2. 新生代与老年代比例-XX:NewRatio标题3. 新生代大小-XX:MaxNewSize4. 永久代大小5. 垃圾回收器5.1. Serial收集器5.2.Parallel收集器5.3. CMSConcurrent Mark Sweep收集器5.4. G1Garbage-First收集器5.5. ZGCZ Garbage Collector收集器5.6. Shenandoah收集器**6. 线程栈大小-Xss7. 其他调优参数四.各个版本JDK中的使用的垃圾回收器1. JDK 1.5及之前版本2. JDK 1.63. JDK 1.74. JDK 1.85. JDK 9及以上版本一、JVM是什么JVM是Java虚拟机Java Virtual Machine的缩写它是Java语言的核心运行时环境之一。JVM是一种抽象的计算机它能够将Java字节码翻译成底层操作系统能够识别的机器码从而实现Java程序的跨平台运行。JVM由三部分组成类加载器、运行时数据区和执行引擎。其中类加载器负责将Java字节码加载到内存中运行时数据区包括方法区、堆、栈等用于存储程序运行时的数据执行引擎则负责执行Java字节码并将其翻译成机器码。JVM还提供了一些垃圾回收机制可以自动管理内存避免内存泄漏等问题。此外JVM还支持多线程编程可以提高程序的并发性能。二、常见的JVM调优方法JVM调优是指对Java虚拟机进行性能优化以提高应用程序的运行效率和响应速度。以下是一些常见的JVM调优方法1.选择合适的垃圾回收器不同的垃圾回收器有不同的优缺点需要根据应用程序的特点选择合适的垃圾回收器。例如如果应用程序需要低延迟可以选择并行或CMS垃圾回收器如果需要高吞吐量可以选择G1垃圾回收器。2.调整堆内存大小堆内存的大小直接影响到应用程序的性能需要根据应用程序的内存使用情况进行调整。可以通过增加或减少-Xms和-Xmx参数来调整堆内存大小。3.调整新生代和老年代的比例新生代和老年代的比例也会影响到垃圾回收的效率和频率。可以根据应用程序的特点进行调整例如如果应用程序有大量的短期对象可以适当增加新生代的比例。4.启用或禁用某些垃圾回收器参数垃圾回收器的参数可以影响到垃圾回收的效率和频率可以根据应用程序的特点启用或禁用某些参数。例如可以启用-XX:UseParallelGC参数来启用并行垃圾回收器。5.使用线程池线程池可以提高线程的利用率减少线程创建和销毁的开销。可以使用Java提供的线程池API或者第三方库来实现线程池。6.避免对象的频繁创建和销毁对象的频繁创建和销毁会导致垃圾回收的频率增加影响应用程序的性能。可以通过使用对象池或者缓存来避免对象的频繁创建和销毁。三、JVM调优参数设置1. 堆内存大小-Xms和-Xmx堆内存是Java程序运行时占用的主要内存区域可以通过调整这两个参数来优化堆内存的使用。-Xms初始堆内存大小单位为字节。默认值为128MB。-Xmx最大堆内存大小单位为字节。默认值为1024MB。2. 新生代与老年代比例-XX:NewRatio新生代和老年代的比例会影响垃圾回收的效率。通过调整这个参数可以平衡新生代和老年代的内存使用。-XX:NewRatio新生代与老年代的比例取值范围为1到1024。默认值为128。标题3. 新生代大小-XX:MaxNewSize新生代的大小会影响垃圾回收的效率。通过调整这个参数可以控制新生代的内存使用。-XX:MaxNewSize新生代的最大大小单位为字节。默认值为64MB。4. 永久代大小永久代是Java虚拟机中用于存储类元数据的内存区域。通过调整这两个参数可以优化永久代的使用。-XX:PermSize永久代的初始大小单位为字节。默认值为64MB。-XX:MaxPermSize永久代的最大大小单位为字节。默认值为256MB。5. 垃圾回收器JVM垃圾回收器是Java虚拟机中用于自动管理内存的组件它能够自动检测和清除不再使用的对象以释放内存空间。JVM垃圾回收器主要有以下几种5.1. Serial收集器单线程执行垃圾回收操作适用于小型应用系统和客户端应用。-XX:UseSerialGC使用串行垃圾回收器。5.2.Parallel收集器多线程执行垃圾回收操作适用于多核CPU的服务器端应用。-XX:UseParallelGC使用并行垃圾回收器。5.3. CMSConcurrent Mark Sweep收集器并发执行垃圾回收操作适用于对响应时间要求较高的应用系统。-XX:UseConcMarkSweepGC5.4. G1Garbage-First收集器将堆划分为多个区域并行执行垃圾回收操作适用于大内存的应用系统。-XX:UseG1GC5.5. ZGCZ Garbage Collector收集器基于Region内存布局的低延迟垃圾回收器适用于大内存、低延迟要求的应用系统。Z Garbage Collector是默认的垃圾回收器除非你在启动参数中明确指定了其他垃圾回收器否则它将自动被使用。-XX:UseZGC5.6. Shenandoah收集器**低延迟、吞吐量可伸缩的垃圾回收器适用于大内存、高吞吐量要求的应用系统。-XX:UseShenandoahGC6. 线程栈大小-Xss线程栈大小影响线程的创建和执行效率。通过调整这个参数可以优化线程栈的使用。-Xss线程栈大小单位为字节。默认值为1MB。7. 其他调优参数这是一组Java虚拟机JVM的启动参数用于配置JVM的内存分配和垃圾回收策略。具体解释如下-Xmn512m设置新生代最小堆内存大小为512MB。-Xms1024m设置初始堆内存大小为2048MB。-Xmx2048m设置最大堆内存大小为2048MB。-Xmn1536m设置新生代最小堆内存大小为1536MB。-Xss256k设置线程栈大小为256KB。-XX:CICompilerCount4设置编译器数量为4个。-XX:ParallelGCThreads4设置并行垃圾回收器使用的线程数为4个。-XX:MetaspaceSize256m设置元空间初始大小为256MB。-XX:MaxMetaspaceSize256m设置元空间最大大小为256MB。-XX:CompressedClassSpaceSize64m设置压缩类空间初始大小为64MB。-XX:UseG1GC启用G1垃圾回收器。-XX:G1ConcRefinementThreads2设置G1垃圾回收器的并发整理线程数为2个。-XX:NativeMemoryTrackingdetail开启本地内存跟踪显示详细的内存使用情况。-Dfile.encodingUTF-8设置文件编码为UTF-8。四.各个版本JDK中的使用的垃圾回收器1. JDK 1.5及之前版本使用Serial、Parallel和CMS垃圾收集器。2. JDK 1.6除了Serial、Parallel和CMS之外还引入了G1垃圾收集器。3. JDK 1.7除了Serial、Parallel、CMS和G1之外还引入了Concurrent Mark Sweep (CMS)垃圾收集器的并行版本。4. JDK 1.8除了Serial、Parallel、CMS、G1和并行CMS之外还引入了默认的垃圾收集器为Parallel并增加了新的Epsilon垃圾收集器。5. JDK 9及以上版本除了Serial、Parallel、CMS、G1、并行CMS和Epsilon之外还引入了ZGC低延迟垃圾收集器和Shenandoah低延迟高吞吐量垃圾收集器。