您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > JAVA

JVM的调优常用参数

时间:2023-11-10 14:21:35  来源:微信公众号  作者:沐雨花飞蝶

调优目的

JVM调优的目的是为了提高JAVA应用程序的性能和稳定性。通过优化JVM的配置和参数设置,可以减少内存占用、提高垃圾回收效率、优化线程管理等,从而提升应用程序的响应速度、降低内存泄漏的风险,并且减少应用程序的崩溃和停顿现象。调优可以根据具体的应用场景和需求进行,以达到最佳的性能和稳定性。

JVM的调优常用参数

常见的一些行为方法:

  • 调整堆内存大小:通过调整-Xmx和-Xms参数来设置堆内存的最大和初始大小。合理地设置堆内存大小可以避免内存溢出和频繁的垃圾回收。
  • 调整垃圾回收器:JVM提供了多种垃圾回收器,如Serial、Parallel、CMS和G1等。根据应用程序的特点和需求,选择合适的垃圾回收器,并通过调整相关参数来优化垃圾回收性能。
  • 优化对象的创建和销毁:避免频繁创建和销毁大量的临时对象,可以减少垃圾回收的压力。可以使用对象池、缓存等技术来重用对象,提高性能。
  • 减少同步操作:过多的同步操作会导致线程竞争和阻塞,影响性能。可以使用无锁数据结构、并发集合类等技术来减少同步操作,提高并发性能。
  • 使用合适的数据结构和算法:选择合适的数据结构和算法可以提高程序的效率。例如,使用HashMap代替Hashtable、使用StringBuilder代替StringBuffer等。
  • 监控和分析JVM性能:使用JVM自带的工具(如jstat、jmap、jstack等)或第三方工具(如VisualVM、JProfiler等)来监控和分析JVM的性能瓶颈,找出优化的方向。

GC事件

JVM的垃圾回收GC事件可以分为以下几类:

  • Minor GC(新生代GC):针对新生代(Young Generation)的垃圾回收事件。在新生代中,通常采用复制算法进行垃圾回收,将存活的对象复制到另一个区域,同时回收无用的对象。Minor GC通常发生频率较高,但回收的对象数量较少。当JVM无法为新对象分配内存空间时总会触发Minor GC)
  • Major GC(老年代GC):针对老年代(Old Generation)的垃圾回收事件。在老年代中,通常采用标记-清除-整理算法进行垃圾回收,首先标记出存活的对象,然后清除无用的对象,最后进行内存整理。Major GC通常发生频率较低,但回收的对象数量较多。
  • Full GC(全局GC):对整个堆内存进行垃圾回收的事件。Full GC包括对新生代和老年代的垃圾回收,通常发生在新生代和老年代都满了的情况下,或者由于系统调用触发。Full GC的开销较大,会导致应用程序的停顿时间较长。
  • Concurrent GC(并发GC):在应用程序运行的同时进行垃圾回收的事件。并发GC的目标是尽量减少应用程序的停顿时间,通过与应用程序并发执行,提高系统的吞吐量。常见的并发GC算法有CMS(Concurrent Mark Sweep)和G1(Garbage First)。

常用参数总结

(1) 堆内存调优参数:

  • -Xms:初始堆大小
  • -Xmx:最大堆大小
  • -Xmn:新生代大小
  • -Xss:线程堆栈大小,默认为1M
  • -XX:MaxPermSize=n:设置持久代大小
  • -XX:NewRatio:新生代和老年代的比例
  • -XX:SurvivorRatio:Eden区和Survivor区的比例

(2) GC调优参数:

  • -XX:+UseSerialGC:使用串行垃圾回收器
  • -XX:+UseParallelGC:使用并行垃圾回收器
  • -XX:+UseConcMarkSweepGC:使用CMS垃圾回收器
  • -XX:+UseG1GC:使用G1垃圾回收器
  • -XX:MaxGCPauseMillis:最大GC停顿时间
  • -XX:+UseAdaptiveSizePolicy:自适应GC策略

(3) GC统计信息

  • -XX:+PrintGC:输出形式:
[GC 118250K->113543K(130112K), 0.0094143 secs]
[Full GC 121376K->10414K(130112K), 0.0650971 secs]
  • -XX:+PrintGCDetAIls:输出形式:
[GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs]
[GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs]
  • -XX:+PrintGCTimeStamps:打印GC停顿耗时
  • -XX:+PrintGCApplicationStoppedTime:打印垃圾回收期间程序暂停的时间.
  • -XX:+PrintHeapAtGC:打印GC前后的详细堆栈信息
  • -Xloggc:filename:把相关日志信息记录到文件以便分析.

(4) 线程调优参数

  • -Xss:每个线程的堆栈大小
  • -XX:ParallelThreads:并行处理的线程数
  • -XX:+UseThreadPriorities:启用线程优先级
  • -XX:+UseCondCardMark:使用条件卡片标记

(5) 类加载调优参数

  • -XX:MaxPermSize:最大方法区大小
  • -XX:+CMSClassUnloadingEnabled:启用CMS类卸载
  • -XX:+UseCompressedOops:使用压缩对象指针

(6) 其他调优参数

  • -XX:+UseBiasedLocking:启用偏向锁
  • -XX:+OptimizeStringConcat:启用字符串拼接优化
  • -XX:MaxTenuringThreshold:对象晋升老年代的年龄阈值
  • -XX:CompileThreshold:JIT编译阈值
  • -XX:+PrintGCDetails:打印GC详细信息

示例配置

-XX:NewRatio=1:设置新生代和年老代的比值为2:1
-Xss:线程堆栈大小,默认为1M,调整为512K
-XX:+UseG1GC:使用G1做为GC收集器
-XX:MaxGCPauseMillis=n:设置并行收集最大暂停时间为20ms


Tags:JVM   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Graalvm 替代 JVM 真的可以带来巨大的性能优势吗?
介绍Spring Boot有助于轻松开发独立的、可用于生产的 Spring 应用程序。它对 Spring 平台和第三方库采用固执己见的方法:以最少的配置简化设置过程。优势: 易于使用:Spring Boo...【详细内容】
2023-12-25  Search: JVM  点击:(126)  评论:(0)  加入收藏
理解Java虚拟机(JVM):优化代码执行效率的内部机制
Java虚拟机(Java Virtual Machine,JVM)是Java程序运行的核心组件,它负责将Java源代码编译成字节码并执行。JVM具有内部机制来优化代码的执行效率,包括即时编译(Just-In-Time Compi...【详细内容】
2023-12-14  Search: JVM  点击:(219)  评论:(0)  加入收藏
深入了解Java的GC原理,掌握JVM 性能调优!
JVM性能调优是一个复杂的过程,需要结合具体的应用程序特性和需求来进行调优。不同的应用场景可能需要不同的调优策略。对于 Java 开发人员来说,进行程序的性能优化是很有挑战...【详细内容】
2023-12-12  Search: JVM  点击:(196)  评论:(0)  加入收藏
GC是什么?为什么要GC?JVM 垃圾回收算法有哪些?
Major GC 老年代区域的垃圾回收,老年代空间不足时,会先尝试触发Minor GC。Minor GC之后空间还不足,则会触发Major GC,Major GC速度比较慢,暂停时间长。图片1 Java垃圾回收机制(GC...【详细内容】
2023-12-07  Search: JVM  点击:(223)  评论:(0)  加入收藏
JVM由那些部分组成,运行流程是什么?
思考: JVM由那些部分组成,运行流程是什么?1.JVM由那些部分组成,运行流程是什么?JVM是什么好处:一次编写,到处运行自动内存管理,垃圾回收机制思考:JVM由哪些部分组成,运行流程是什么?...【详细内容】
2023-12-06  Search: JVM  点击:(204)  评论:(0)  加入收藏
JVM的调优常用参数
调优目的JVM调优的目的是为了提高Java应用程序的性能和稳定性。通过优化JVM的配置和参数设置,可以减少内存占用、提高垃圾回收效率、优化线程管理等,从而提升应用程序的响应速...【详细内容】
2023-11-10  Search: JVM  点击:(201)  评论:(0)  加入收藏
JVM 解释和编译指南
Java 是一种跨平台的编程语言。程序源代码会被编译为 字节码bytecode,然后字节码在运行时被转换为 机器码machine code。解释器interpreter 在物理机器上模拟出的抽象计算机...【详细内容】
2023-11-07  Search: JVM  点击:(365)  评论:(0)  加入收藏
深入理解并发编程艺术之JVM内存模型
java内存模型由来我们知道不同的计算机硬件和操作系统的,所遵循的规范以及计算机内存模型是有区别的,也就意味着我们开发的程序放在某个计算机硬件和操作系统上运行是正常的,而...【详细内容】
2023-10-27  Search: JVM  点击:(428)  评论:(0)  加入收藏
OOM异常会导致JVM退出吗?
熟悉Java开发的人,应该会经常遇到的异常:OOM,那么这个异常会导致 JVM 虚拟机退出吗?结论Java虚拟机(JVM)在运行Java应用时,可能会遇到内存不足的情况,从而抛出OutOfMemoryError(OOM)。...【详细内容】
2023-10-13  Search: JVM  点击:(243)  评论:(0)  加入收藏
JVM是如何判定对象已死的?学JVM必会的知识!
大家好,我是 BookSea。作为一名Java程序员,我们每天都在程序里不停地去new对象,但是你知道这些被new出来的对象,最后是怎么被回收的吗?在堆里面存放着Java世界中几乎所有的对象实...【详细内容】
2023-10-08  Search: JVM  点击:(333)  评论:(0)  加入收藏
▌简易百科推荐
Java 8 内存管理原理解析及内存故障排查实践
本文介绍Java8虚拟机的内存区域划分、内存垃圾回收工作原理解析、虚拟机内存分配配置,以及各垃圾收集器优缺点及场景应用、实践内存故障场景排查诊断,方便读者面临内存故障时...【详细内容】
2024-03-20  vivo互联网技术    Tags:Java 8   点击:(14)  评论:(0)  加入收藏
如何编写高性能的Java代码
作者 | 波哥审校 | 重楼在当今软件开发领域,编写高性能的Java代码是至关重要的。Java作为一种流行的编程语言,拥有强大的生态系统和丰富的工具链,但是要写出性能优异的Java代码...【详细内容】
2024-03-20    51CTO  Tags:Java代码   点击:(19)  评论:(0)  加入收藏
在Java应用程序中释放峰值性能:配置文件引导优化(PGO)概述
译者 | 李睿审校 | 重楼在Java开发领域,优化应用程序的性能是开发人员的持续追求。配置文件引导优化(Profile-Guided Optimization,PGO)是一种功能强大的技术,能够显著地提高Ja...【详细内容】
2024-03-18    51CTO  Tags:Java   点击:(24)  评论:(0)  加入收藏
Java生产环境下性能监控与调优详解
堆是 JVM 内存中最大的一块内存空间,该内存被所有线程共享,几乎所有对象和数组都被分配到了堆内存中。堆被划分为新生代和老年代,新生代又被进一步划分为 Eden 和 Survivor 区,...【详细内容】
2024-02-04  大雷家吃饭    Tags:Java   点击:(55)  评论:(0)  加入收藏
在项目中如何避免和解决Java内存泄漏问题
在Java中,内存泄漏通常指的是程序中存在一些不再使用的对象或数据结构仍然保持对内存的引用,从而导致这些对象无法被垃圾回收器回收,最终导致内存占用不断增加,进而影响程序的性...【详细内容】
2024-02-01  编程技术汇  今日头条  Tags:Java   点击:(68)  评论:(0)  加入收藏
Java中的缓存技术及其使用场景
Java中的缓存技术是一种优化手段,用于提高应用程序的性能和响应速度。缓存技术通过将计算结果或者经常访问的数据存储在快速访问的存储介质中,以便下次需要时可以更快地获取。...【详细内容】
2024-01-30  编程技术汇    Tags:Java   点击:(72)  评论:(0)  加入收藏
JDK17 与 JDK11 特性差异浅谈
从 JDK11 到 JDK17 ,Java 的发展经历了一系列重要的里程碑。其中最重要的是 JDK17 的发布,这是一个长期支持(LTS)版本,它将获得长期的更新和支持,有助于保持程序的稳定性和可靠性...【详细内容】
2024-01-26  政采云技术  51CTO  Tags:JDK17   点击:(88)  评论:(0)  加入收藏
Java并发编程高阶技术
随着计算机硬件的发展,多核处理器的普及和内存容量的增加,利用多线程实现异步并发成为提升程序性能的重要途径。在Java中,多线程的使用能够更好地发挥硬件资源,提高程序的响应...【详细内容】
2024-01-19  大雷家吃饭    Tags:Java   点击:(105)  评论:(0)  加入收藏
这篇文章彻底让你了解Java与RPA
前段时间更新系统的时候,发现多了一个名为Power Automate的应用,打开了解后发现是一个自动化应用,根据其描述,可以自动执行所有日常任务,说的还是比较夸张,简单用了下,对于office、...【详细内容】
2024-01-17  Java技术指北  微信公众号  Tags:Java   点击:(95)  评论:(0)  加入收藏
Java 在 2023 年仍然流行的 25 个原因
译者 | 刘汪洋审校 | 重楼学习 Java 的过程中,我意识到在 90 年代末 OOP 正值鼎盛时期,Java 作为能够真正实现这些概念的语言显得尤为突出(尽管我此前学过 C++,但相比 Java 影响...【详细内容】
2024-01-10  刘汪洋  51CTO  Tags:Java   点击:(74)  评论:(0)  加入收藏
站内最新
站内热门
站内头条