龙空技术网

JVM常用参数配置解析

沪上人间 77

前言:

眼前各位老铁们对“java参数配置”大概比较重视,你们都想要了解一些“java参数配置”的相关内容。那么小编同时在网摘上网罗了一些有关“java参数配置””的相关文章,希望各位老铁们能喜欢,朋友们快快来学习一下吧!

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调优之前,建议先进行性能分析和监控,找出潜在的瓶颈和问题点。不同的应用程序可能需要不同的参数配置,因此需要根据具体应用程序的特性和工作负载进行评估和测试。避免过度创建对象,以减少垃圾回收的负担。

标签: #java参数配置