网站首页 > 文章精选 正文
JVM(Java虚拟机)的参数配置对于优化Java应用程序的性能至关重要。本文将介绍一些常见的JVM参数配置。
一、标准参数
- -client和-server:设置JVM使用client模式或server模式。client模式启动快,但性能和内存管理效率不高,适用于桌面应用;server模式启动慢,但性能和内存管理效率高,适用于服务器。64位的JVM只有server模式。
- -verbose:查询GC(垃圾回收)问题最常用的命令之一,常用于排查GC问题。例如,-verbose:gc输出每次GC的相关情况,-verbose:class输出JVM载入类的相关信息,-verbose:jni输出native方法调用的相关情况。
二、非标准参数(-X)
- -Xms:设置初始堆内存大小,即程序启动时占用内存大小,默认是物理内存的1/64。
- -Xmx:设置最大堆内存大小,即程序运行期间最大可占用的内存大小。如果程序运行需要占用更多的内存,超出了这个设置值,就会抛出OutOfMemory异常,默认是物理内存的1/4。
- -Xmn:设置年轻代大小,增大年轻代会减少老年代大小,官网推荐整堆的3/8。
- -Xss:设置单个线程栈内存大小,默认是1MB。
三、非标准参数(-XX)
性能参数
- -XX:+UseSerialGC:使用串行垃圾收集器。
- -XX:+UseParallelGC:使用并行垃圾收集器(年轻代)。
- -XX:+UseParallelOldGC:使用并行垃圾收集器(老年代),JDK6.0以上支持。
- -XX:+UseConcMarkSweepGC:使用CMS(Concurrent Mark Sweep)垃圾收集器,适用于多CPU,并要求缩短因GC造成程序停滞的时间。
- -XX:+UseG1GC:使用G1垃圾收集器。
- -XX:+HeapDumpOnOutOfMemoryError:这个参数告诉JVM在内存溢出错误发生时生成堆转储文件。
- -XX:HeapDumpPath={HEAP-DUMP-FILE-PATH} :这个参数指定了堆转储文件的存储路径。需要将{HEAP-DUMP-FILE-PATH}替换为实际的文件路径。
行为参数
- -XX:NewRatio:设置年轻代(包括Eden和两个Survivor区)与老年代的比值(除去持久代)。例如,设置为4,则年轻代与老年代所占比值为1:4。
- -XX:SurvivorRatio:设置年轻代中Eden区与Survivor区的大小比值。例如,设置为4,则两个Survivor区与一个Eden区的比值为2:4。
- -XX:MaxTenuringThreshold:设置垃圾最大年龄。如果设置为0,则年轻代对象不经过Survivor区,直接进入老年代。
- -XX:PermSize 和 -XX:MaxPermSize:设置持久代(PermGen space)的初始大小和最大大小。不过,在Java 8中,PermGen space被元空间(Metaspace)所替代,相关参数变为-XX:MetaspaceSize和-XX:MaxMetaspaceSize。
调试参数
- -XX:+PrintGC:每次触发GC时打印相关日志。
- -XX:+PrintGCDetails:打印更详细的GC日志。
- -XX:+PrintGCTimeStamps:打印GC发生的时间戳。
- -Xloggc:filename:将GC日志输出到指定文件。例如,-Xloggc:/data/gclog/gc.log表示将GC日志输出到指定路径。
- -XX:+DisableExplicitGC:禁用System.gc()调用,防止显式触发Full GC。
四、实际应用中的配置示例
辅助指令jinfo
jinfo:查看或修改正在运行的JVM配置。例如,jinfo -flag
HeapDumpOnOutOfMemoryError 870778用于查看进程号为870778的JVM是否开启了
HeapDumpOnOutOfMemoryError配置。
配置示例
堆内存配置
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
这里设置了JVM最大可用内存为3550MB,初始内存也为3550MB(避免垃圾回收后重新分配内存),年轻代大小为2GB,每个线程的堆栈大小为128KB。
并行收集器配置
java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
这里选择了并行垃圾收集器,并配置了20个并行GC线程。
五、注意事项
- 在进行JVM调优之前,建议先进行性能分析和监控,找出潜在的瓶颈和问题点。
- 不同的应用程序可能需要不同的参数配置,因此需要根据具体应用程序的特性和工作负载进行评估和测试。
- 避免过度创建对象,以减少垃圾回收的负担。
- 上一篇: jvm疯狂吃内存,到底是谁的锅?
- 下一篇: JVM参数配置与性能优化:打造高效Java应用的秘密武器
猜你喜欢
- 2025-04-23 【Linux】——从0到1的学习,让你熟练掌握,带你玩转Linu
- 2025-04-23 深入解析Java虚拟机(JVM)底层原理
- 2025-04-23 性能优越的轻量级日志收集工具,微软、亚马逊都在用
- 2025-04-23 JVM性能分析工具:Jstack
- 2025-04-23 JVM常用参数自查笔记
- 2025-04-23 Java性能调优实用指南
- 2025-04-23 常见的JVM参数配置
- 2025-04-23 JVM参数配置实战手册:从入门到生产级调优
- 2025-04-23 聊聊JVM如何调优
- 2025-04-23 性能测试之网络分析
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)