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


    第一章 走进JVM的世界之 了解JVM基础



    一、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. CMS(Concurrent Mark Sweep)收集器

    并发执行垃圾回收操作,适用于对响应时间要求较高的应用系统。

    • -XX:+UseConcMarkSweepGC

    5.4. G1(Garbage-First)收集器

    将堆划分为多个区域,并行执行垃圾回收操作,适用于大内存的应用系统。

    • -XX:+UseG1GC

    5.5. ZGC(Z Garbage Collector)收集器

    基于Region内存布局的低延迟垃圾回收器,适用于大内存、低延迟要求的应用系统。Z Garbage Collector是默认的垃圾回收器,除非你在启动参数中明确指定了其他垃圾回收器,否则它将自动被使用。

    • -XX:+UseZGC

    5.6. Shenandoah收集器**

    低延迟、吞吐量可伸缩的垃圾回收器,适用于大内存、高吞吐量要求的应用系统。

    • -XX:+UseShenandoahGC

    6. 线程栈大小(-Xss)

    线程栈大小影响线程的创建和执行效率。通过调整这个参数,可以优化线程栈的使用。

    • -Xss:线程栈大小,单位为字节。默认值为1MB。

    7. 其他调优参数

    这是一组Java虚拟机(JVM)的启动参数,用于配置JVM的内存分配和垃圾回收策略。具体解释如下:

    • -Xmn512m:设置新生代最小堆内存大小为512MB。
    • -Xms1024m:设置初始堆内存大小为2048MB。
    • -Xmx2048m:设置最大堆内存大小为2048MB。
    • -Xmn1536m:设置新生代最小堆内存大小为1536MB。
    • -Xss256k:设置线程栈大小为256KB。
    • -XX:CICompilerCount=4:设置编译器数量为4个。
    • -XX:ParallelGCThreads=4:设置并行垃圾回收器使用的线程数为4个。
    • -XX:MetaspaceSize=256m:设置元空间初始大小为256MB。
    • -XX:MaxMetaspaceSize=256m:设置元空间最大大小为256MB。
    • -XX:CompressedClassSpaceSize=64m:设置压缩类空间初始大小为64MB。
    • -XX:+UseG1GC:启用G1垃圾回收器。
    • -XX:G1ConcRefinementThreads=2:设置G1垃圾回收器的并发整理线程数为2个。
    • -XX:NativeMemoryTracking=detail:开启本地内存跟踪,显示详细的内存使用情况。
    • -Dfile.encoding=UTF-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(低延迟高吞吐量垃圾收集器)。

  • 相关阅读:
    2022年N1叉车司机考试模拟100题及在线模拟考试
    Kotlin Sequence 是时候派上用场了
    Go的插件机制:动态加载与卸载
    JetCache设计原理浅析
    Nacos配置中心实战
    R语言时间序列数据算术运算:使用log函数将时间序列数据的数值对数化(平方、开平方、指数化等函数类似使用)
    基于Python实现的人工智能作业小车问题
    猿创征文|三维重建领域的开发者工具箱
    机器学习---线性回归、Logistic回归问题相关笔记及实现
    记录一下 cuda、torchinfo、gpustat 相关知识
  • 原文地址:https://blog.csdn.net/weixin_40357412/article/details/133964946