JVM 21 的调优指南:如何进行JVM调优,JVM调优参数

这篇具有很好参考价值的文章主要介绍了JVM 21 的调优指南:如何进行JVM调优,JVM调优参数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

聊聊关于JVM 21的优化指南。这篇文章将会深入探讨如何进行JVM调优,介绍一些关键的JVM调优参数,并提供12个实用的代码示例。由于篇幅较长,我会分几个部分来详细讲解,之前写的也有33篇系列教程JVM调优实战打击也可以去围观。

JVM调优概览

JVM(Java虚拟机)调优是一个复杂但重要的任务,特别是在处理大型、复杂的应用程序时。JVM调优的目的是优化JVM的性能,以提高应用程序的响应速度和处理能力。JVM 21引入了一些新的优化特性和参数,使得调优工作更加高效。

本文已收录于,我的技术网站 ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享文章来源地址https://www.toymoban.com/news/detail-819525.html

JVM调优参数

JVM调优通常涉及到以下几个方面的参数:

1、内存管理参数:

-Xms-Xmx:设置堆的初始大小和最大大小。

-XX:NewSize-XX:MaxNewSize:设置新生代的初始大小和最大大小。

-XX:PermSize-XX:MaxPermSize:设置永久代(在JDK 8之后被元空间Metaspace替代)的大小。

2、垃圾收集器参数:

-XX:+UseG1GC:启用G1垃圾收集器。

-XX:GCTimeRatio:设置吞吐量大小。

-XX:MaxGCPauseMillis:设置最大垃圾收集停顿时间。

3、性能监控参数:

-XX:+PrintGCDetails:打印垃圾回收的详细信息。

-XX:+UseGCLogFileRotation:启用GC日志文件的自动旋转。

12个实战案例

现在,让我们来看几个实用的代码示例,这些示例将帮助你更好地理解JVM调优的实践操作。

示例1:基本的JVM内存设置

// 示例代码:设置JVM的初始堆大小和最大堆大小
public class JvmMemoryExample {
    public static void main(String[] args) {
        // 这里的代码主要用于展示,实际JVM的参数设置是在启动JVM时通过命令行完成的
        System.out.println("JVM Memory Example");
    }
}

启动参数:

java -Xms512m -Xmx1024m JvmMemoryExample

这个示例中,我们设置了JVM的初始堆大小为512MB,最大堆大小为1024MB。

示例2:使用G1垃圾收集器

// 示例代码:使用G1垃圾收集器
public class G1GCExample {
    public static void main(String[] args) {
        // G1垃圾收集器的使用主要是通过JVM启动参数来设置
        System.out.println("G1 Garbage Collector Example");
    }
}

启动参数:

java -XX:+UseG1GC G1GCExample

在这个示例中,我们通过JVM参数启用了G1垃圾收集器。

示例3:打印GC详细信息

// 示例代码:打印GC的详细信息
public class GCDetailsExample {
    public static void main(String[] args) {
        // 打印GC详细信息是通过JVM参数来实现的
        System.out.println("GC Details Example");
    }
}

启动参数:

java -XX:+PrintGCDetails GCDetailsExample

这里,我们通过JVM参数来打印垃圾回收的详细信息。

示例4:设置最大停顿时间目标

这个示例演示了如何设置垃圾回收的最大停顿时间目标,以减少垃圾回收对应用性能的影响。

// 示例代码:设置最大停顿时间目标
public class MaxGCPauseMillisExample {
    public static void main(String[] args) {
        // 设置最大停顿时间是通过JVM启动参数实现的,代码本身不涉及
        System.out.println("Max GC Pause Millis Example");
    }
}

启动参数:

java -XX:MaxGCPauseMillis=200 MaxGCPauseMillisExample

这个参数设置了垃圾回收的最大停顿时间为200毫秒。

示例5:使用并行垃圾收集器

这个示例展示了如何启用并行垃圾收集器,这有助于在多核处理器上提高垃圾回收的效率。

// 示例代码:使用并行垃圾收集器
public class ParallelGCExample {
    public static void main(String[] args) {
        // 启用并行垃圾收集器是通过JVM启动参数来设置的
        System.out.println("Parallel Garbage Collector Example");
    }
}

启动参数:

java -XX:+UseParallelGC ParallelGCExample

这个参数启用了并行垃圾收集器,利用多核处理器来提高垃圾回收效率。

示例6:开启GC日志和日志文件轮换

这个示例演示了如何开启GC日志记录,并且启用日志文件轮换功能,以便更好地管理和分析GC日志。

// 示例代码:开启GC日志和日志文件轮换
public class GCLogExample {
    public static void main(String[] args) {
        // 开启GC日志和日志文件轮换是通过JVM参数实现的
        System.out.println("GC Log and Log Rotation Example");
    }
}

启动参数:

java -XX:+PrintGC -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M GCLogExample

这些参数组合实现了开启GC日志记录,并设置了日志文件轮换,保持最多5个GC日志文件,每个文件大小不超过10MB。

示例7:开启线程本地分配缓冲(TLAB)

这个示例演示了如何开启线程本地分配缓冲(TLAB),这是一种优化技术,可以减少线程间的竞争,提高对象分配的效率。

// 示例代码:开启线程本地分配缓冲(TLAB)
public class TLABExample {
    public static void main(String[] args) {
        // 开启TLAB是通过JVM参数实现的
        System.out.println("Thread Local Allocation Buffer (TLAB) Example");
    }
}

启动参数:

java -XX:+UseTLAB TLABExample

通过这个参数,JVM会为每个线程分配一个本地缓冲区,用于对象分配,从而减少线程间的竞争。最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。这是大佬写的, 七千页的BAT大佬写的刷题笔记,让我offer拿到手软

示例8:设置元空间大小

元空间(Metaspace)是存放类元数据的区域。这个示例展示了如何设置元空间的大小,避免因元空间不足而导致的问题。

// 示例代码:设置元空间大小
public class MetaspaceSizeExample {
    public static void main(String[] args) {
        // 设置元空间大小是通过JVM参数来实现的
        System.out.println("Metaspace Size Example");
    }
}

启动参数:

java -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m MetaspaceSizeExample

这里我们设置了元空间的初始大小为128MB,最大大小为256MB。

示例9:开启类数据共享(CDS)

类数据共享(CDS)可以加快JVM的启动速度,并减少运行时内存的占用。这个示例演示了如何开启CDS。

// 示例代码:开启类数据共享(CDS)
public class CDSExample {
    public static void main(String[] args) {
        // 开启CDS是通过JVM参数实现的
        System.out.println("Class Data Sharing (CDS) Example");
    }
}

启动参数:

java -XX:+UseCDS CDSExample

通过这个参数,JVM会尝试共享常用类的数据,以此来提高性能。

示例10:设置年轻代和老年代的比例

在JVM中,堆内存被分为年轻代和老年代。合理设置这两者的比例可以优化垃圾收集的性能。

// 示例代码:设置年轻代和老年代的比例
public class YoungOldGenerationRatioExample {
    public static void main(String[] args) {
        // 设置年轻代和老年代的比例是通过JVM参数来实现的
        System.out.println("Young/Old Generation Ratio Example");
    }
}

启动参数:

java -XX:NewRatio=2 YoungOldGenerationRatioExample

这个参数设置年轻代(New Generation)与老年代(Old Generation)的大小比例为1:2。

示例11:开启字符串去重

字符串去重是JVM在Java 8u20及以后版本引入的一个特性,可以减少重复字符串的内存占用,提高性能。

// 示例代码:开启字符串去重
public class StringDeduplicationExample {
    public static void main(String[] args) {
        // 开启字符串去重是通过JVM参数来实现的
        System.out.println("String Deduplication Example");
    }
}

启动参数:

java -XX:+UseStringDeduplication StringDeduplicationExample

这个参数启用了字符串去重功能,帮助节省内存空间。

示例12:设置代码缓存大小

代码缓存是JVM中存储已编译方法的地方。调整代码缓存的大小可以影响编译方法的数量和性能。

// 示例代码:设置代码缓存大小
public class CodeCacheSizeExample {
    public static void main(String[] args) {
        // 设置代码缓存大小是通过JVM参数来实现的
        System.out.println("Code Cache Size Example");
    }
}

启动参数:

java -XX:InitialCodeCacheSize=32m -XX:ReservedCodeCacheSize=64m CodeCacheSizeExample

这些参数设置了代码缓存的初始大小为32MB,最大保留大小为64MB。

结语

以上示例展现了JVM调优的不同方面,包括内存管理、性能优化和资源利用率的提升。之前写的也有33篇系列教程JVM调优实战打击也可以去围观。每个应用的具体情况都不尽相同,因此在进行JVM调优时,需要根据实际情况进行细致的调整和测试。希望这些示例能够为你掌握JVM调优提供实用的参考。记住,有效的JVM调优策略是基于对应用性能和资源使用的深入了解。持续监控和适时调整,才能确保应用的最佳性能。

本文已收录于,我的技术网站 ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享

到了这里,关于JVM 21 的调优指南:如何进行JVM调优,JVM调优参数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JVM——垃圾回收器G1+垃圾回收调优

    定义: 取代了CMS垃圾回收器。和CMS一样时并发的。  适用场景: 物理上分区,逻辑上分代。   相关JVM参数: -XX:+UseG1GC -XX:G1HeapRegionSize=size -XX:MaxGCPauseMillis=time  三个回收阶段,第一个是新生代回收,第二个是新生代+CM,第三个是混合回收。 当老年代内存超过阈值,会在新生代垃

    2024年02月12日
    浏览(32)
  • 面试官:如何进行 JVM 调优(附真实案例)

    面试官:在工作中做过 JVM 调优吗?讲讲做过哪些 JVM 调优? 我一个QPS不到10的项目,上次问我缓存穿透缓存雪崩,这次问我 JVM 调优,我是真滴难。 不过大家别慌,热心的我给大家找来了几个满分回答,大家选择合适的使用。 回答1:听好了,下面将是我第一次 JVM 调优。 回

    2024年01月19日
    浏览(45)
  • 【JVM】JVM 调优的参数都有哪些?

    设置堆的初始大小和最大大小,为了防止垃圾收集器在初始大小、最大大小之间收缩堆而产生额外的时间, 通常把最大、初始大小设置为相同的值 。 堆空间设置多少合适? 最大大小的默认值是物理内存的1/4,初始大小是物理内存的1/64 堆太小,可能会频繁的导致年轻代和老

    2024年02月12日
    浏览(29)
  • JVM调优指令&参数

    常用命令查找文档站点:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html 输出所有参数的名称和默认值,默认不包括Diagnostic和Experimental的参数。可以配合  -XX:+UnlockDiagnosticVMOptions 和 -XX:UnlockExperimentalVMOptions 使用 注意: 这里列举出来的所有参数值,大体分为两类。一类

    2024年02月10日
    浏览(28)
  • 【jvm系列-13】jvm性能调优篇---参数设置以及日志分析

    JVM系列整体栏目 内容 链接地址 【一】初识虚拟机与java虚拟机 https://blog.csdn.net/zhenghuishengq/article/details/129544460 【二】jvm的类加载子系统以及jclasslib的基本使用 https://blog.csdn.net/zhenghuishengq/article/details/129610963 【三】运行时私有区域之虚拟机栈、程序计数器、本地方法栈 https

    2024年02月06日
    浏览(43)
  • 【JVM的相关参数和调优】

    这类此参数在jdk的各个版本之间很少会变化,基本不改变 java -version,查看当前电脑上的jdk的版本信息 java -help,查看java命令的各种选项和参数 java -showversion,相当于上述两者结合 4. jps,查看后台运行的 java 进程 Test 的进程 id 为 29636 5. jinfo,通过进程 id 查看正在运行的 jav

    2024年01月17日
    浏览(44)
  • JVM——配置常用参数,GC调优策略

    Java内存区域常见配置参数概览 堆参数; 回收器参数; 项目中常用配置; 常用组合; Java内存区域常见配置参数概览 堆参数 回收器参数 如上表所示,目前 主要有串行、并行和并发三种 ,对于大内存的应用而言,串行的性能太低,因此使用到的主要是并行和并发两种。并行

    2024年02月12日
    浏览(29)
  • JVM——JVM参数指南

    在本篇文章中,你将掌握最常用的 JVM 参数配置。如果对于下面提到了一些概念比如堆、 Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。 此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里

    2024年02月12日
    浏览(28)
  • Java线上故障排查(CPU、磁盘、内存、网络、GC)+JVM性能调优监控工具+JVM常用参数和命令

    根据服务部署和项目架构,从如下几个方面排查: (1)运用服务器:排查内存,cpu,请求数等; (2)文件图片服务器:排查内存,cpu,请求数等; (3)计时器服务器:排查内存,cpu,请求数等; (4)redis服务器:排查内存,cpu,连接数等; (5)db服务器:排查内存,cpu,连接数

    2024年02月07日
    浏览(46)
  • TOMCAT部署及优化(Tomcat配置文件参数优化,Java虚拟机(JVM)调优)

    TOMCAT tomcat :是一个开放源代码的web应用服务器,基于java代码开发的。也可以理解为tomacat就是处理动态请求和基于java代码的页面开发。可以在html当中写入java代码,tomcat可以解析html页面当中的java,执行动态请求,动态页面。 tomcat是机制存在一些问题,如果不对tomcat进行优化

    2024年02月13日
    浏览(21)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包