Java常用JVM参数实战
作者:蚂蚁背大象 发布时间:2023-03-15 10:33:39
在Java应用程序的部署和调优过程中,合理配置JVM参数是提升性能和稳定性的关键之一。本文将介绍一些常用的JVM参数,并给出具体的使用例子和作用的分析。
内存管理相关参数
-Xmx和-Xms
-Xmx参数用于设置JVM的最大堆内存大小,而-Xms参数用于设置JVM的初始堆内存大小。这两个参数可以在启动时通过命令行进行配置,例如:
java -Xmx2g -Xms512m MyApp
上述示例将JVM的最大堆内存设置为2GB,初始堆内存设置为512MB。
作用分析:
较大的最大堆内存可以增加应用程序的可用内存空间,提高性能。但也需要考虑服务器硬件资源的限制。
合理设置初始堆内存大小可以减少JVM的自动扩容和收缩开销。
-XX:NewRatio和-XX:SurvivorRatio
-XX:NewRatio参数用于设置新生代与老年代的比例,默认值为2。而-XX:SurvivorRatio参数用于设置Eden区与Survivor区的比例,默认值为8。
例如,我们可以使用以下参数配置:
java -XX:NewRatio=3 -XX:SurvivorRatio=4 MyApp
作用分析:
调整新生代与老年代的比例可以根据应用程序的特点来优化内存分配。
调整Eden区与Survivor区的比例可以控制对象在新生代中的存活时间。
-XX:MaxMetaspaceSize
在Java 8及之后的版本中,-XX:MaxMetaspaceSize参数用于设置元空间(Metaspace)的最大大小。例如:
java -XX:MaxMetaspaceSize=512m MyApp
作用分析:
元空间用于存储类的元数据信息,包括类的结构、方法、字段等。
调整元空间的最大大小可以避免元空间溢出的问题,提高应用程序的稳定性。
-Xmn
-Xmn参数用于设置新生代的大小。以下是一个例子:
java -Xmn256m MyApp
-Xmn256m将新生代的大小设置为256MB。
作用分析:
新生代主要存放新创建的对象,设置合适的大小可以提高垃圾回收的效率。
垃圾回收相关参数
-XX:+UseG1GC
-XX:+UseG1GC参数用于启用G1垃圾回收器。例如:
java -XX:+UseG1GC MyApp
作用分析:
G1垃圾回收器是Java 9及之后版本的默认垃圾回收器,具有更好的垃圾回收性能和可预测的暂停时间。
使用G1垃圾回收器可以减少垃圾回收的停顿时间,提高应用程序的吞吐量。
-XX:ParallelGCThreads和-XX:ConcGCThreads
-XX:ParallelGCThreads参数用于设置并行垃圾回收器的线程数量,而-XX:ConcGCThreads参数用于设置并发垃圾回收器的线程数量。例如:
java -XX:ParallelGCThreads=4 -XX:ConcGCThreads=2 MyApp
作用分析:
并行垃圾回收器通过使用多个线程来并行执行垃圾回收操作,提高回收效率。
并发垃圾回收器在应用程序运行的同时执行垃圾回收操作,减少停顿时间。
-XX:+ExplicitGCInvokesConcurrent
-XX:+ExplicitGCInvokesConcurrent参数用于允许主动触发并发垃圾回收。例如:
java -XX:+ExplicitGCInvokesConcurrent MyApp
作用分析:
默认情况下,当调用System.gc()方法时,JVM会使用串行垃圾回收器执行垃圾回收操作。使用该参数可以改为使用并发垃圾回收器执行垃圾回收操作,减少停顿时间。
性能监控和调优参数
-XX:+PrintGCDetails和-XX:+PrintGCDateStamps
-XX:+PrintGCDetails参数用于打印详细的垃圾回收信息,-XX:+PrintGCDateStamps参数用于打印垃圾回收发生的时间戳。例如:
java -XX:+PrintGCDetails -XX:+PrintGCDateStamps MyApp
作用分析:
打印垃圾回收的详细信息可以帮助我们了解垃圾回收器的工作情况,检测潜在的性能问题。
打印垃圾回收发生的时间戳可以帮助我们分析应用程序的垃圾回收模式和频率。
-XX:+HeapDumpOnOutOfMemoryError和-XX:HeapDumpPath
-XX:+HeapDumpOnOutOfMemoryError参数用于在发生内存溢出错误时生成堆转储文件,-XX:HeapDumpPath参数用于指定堆转储文件的路径。例如:
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump/file MyApp
作用分析:
在发生内存溢出错误时生成堆转储文件可以帮助我们分析应用程序的内存使用情况,定位内存泄漏和性能瓶颈。
-XX:ThreadStackSize
-XX:ThreadStackSize参数用于设置线程栈的大小。以下是一个例子:
java -XX:ThreadStackSize=256k MyApp
作用分析:
线程栈用于存储线程执行时的方法调用和局部变量等信息。
通过调整线程栈的大小,可以控制应用程序中线程的数量和资源消耗。
-XX:MaxDirectMemorySize
-XX:MaxDirectMemorySize参数用于设置直接内存的最大大小。以下是一个例子:
java -XX:MaxDirectMemorySize=1g MyApp
作用分析:
直接内存是Java堆外的内存,由ByteBuffer等类使用。
合理设置直接内存的最大大小可以避免直接内存溢出的问题,提高应用程序的稳定性。
其他参数
除了上述介绍的常用JVM参数,还有一些其他参数可以根据具体需求进行配置,如:
-XX:+DisableExplicitGC:禁止主动调用System.gc()方法。
-XX:+UseCompressedOops:启用指针压缩以减小对象引用的内存占用。
-XX:OnOutOfMemoryError:在发生OutOfMemoryError时执行特定的命令或脚本。
这些参数可以根据应用程序的特点和需求进行调优和配置,以提升应用程序的性能和稳定性。
来源:https://juejin.cn/post/7235435351049781304


猜你喜欢
- 委托给了C#操作函数的灵活性,我们可使用委托像操作变量一样来操作函数,其实这个功能并不是C#的首创,早在C++时代就有函数指针这一说法,而在
- Java 中的线程有以下状态:新建状态(New):新创建的线程,还未执行。就绪状态(Runnable):执行了 start() 方法,等待运
- java中实现多线程的方法有两种:继承Thread类和实现runnable接口。1.继承Thread类,重写父类run()方法 public
- 经测试,是环绕通知改变了返回值,切面方法需要有返回值,来代替被代理方法返回结果改成如下即可:@Around("point_upda
- 1、概念:MyBatis中的延迟加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。例如在进行一
- 代码测试可用,运行结果非常辣眼睛,有种二十一世纪初流行于广大中小学生之间的失落非主流的感觉!还是比较有参考价值的,获取当前日期时间,日期类格
- LRU算法:最近最少使用淘汰算法(Least Recently Used)。LRU是淘汰最长时间没有被使用的缓存(即使该缓存被访问的次数最多
- 业务场景:调用同步接口获取当前全部有效账户,数据库已存在部分账户信息,因此需要筛选同步接口中已存在本地的帐户。调用接口获取的数据集合List
- FreeMarker 是一个采用 Java 开发的模版引擎,是一个基于模版生成文本的通用工具。 它被设计用来生成 HTML Web 页面,特
- Android部分手机会有虚拟按键,而没有实体按键,例如华为系列的手机。然而在开发过程中,有时候会涉及底部视图的开发,最终的结果却因为虚拟按
- 本文实例为大家分享了unity实现场景跳转的具体代码,供大家参考,具体内容如下话不多说直接开始操作步骤。1.打开我们的unity创建一个工程
- 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实
- 问题描述 在某一天打开电脑后,idea里的代码无缘无故地就爆红了,不但spring框架爆红,就
- 上一篇博文《Android中Handler使用浅析》通过实现倒计时闪屏页面的制作引出了Handler的使用方法以及实现原理,博文末尾也提到了
- 近日有朋友问我有没有如下图效果的开源控件相信大家无论是用IOS还是Android,都对这种效果不陌生,很多主流APP都会有这样或类似的效果,
- 前言相信大家在java中用到的最多的时间类莫过于 java.util.Date了,由于Date类中将getYear() , getMonth
- 本文实例讲述了Android实现整理PackageManager获取所有安装程序信息的方法。分享给大家供大家参考,具体如下:List<
- 前言Mybatis真正强大的地方在于SQL映射语句,这也是它的魅力所在。相对于它强大的功能,SQL映射文件的配置却非常简单,我上篇文章语句讲
- 类是使用关键字 class 声明的,如下面的示例所示:访问修饰符 class 类名 { //类成员: // Methods, prope
- 我之前写了一篇关于美团网,大众点评的购买框效果的文章Android对ScrollView滚动监听,实现美团、大众点评的购买悬浮效果,我自己感