Jvm 启动常用参数

179 阅读3分钟

Java虚拟机启动参数是控制Java应用程序及其运行时环境的一种重要手段,通过设置不同的参数可以调整Java虚拟机的性能、资源利用率、垃圾回收策略等方面的行为。本文将全面详细介绍Java虚拟机启动参数的各项内容。

Java虚拟机启动参数可以分为三种类型:标准选项、非标准选项和不稳定选项。下面将分别对它们进行详细讲解。

一、标准选项

标准选项是所有Java虚拟机都支持的选项,一般用来控制Java虚拟机的基本行为。常见的标准选项包括:

  1. -client/-server:指定Java虚拟机的运行模式,默认为客户端模式(-client)。客户端模式适用于小规模应用程序,它优化了启动时间和响应时间;服务器模式适用于大规模应用程序,它优化了性能和吞吐量。

  2. -Xmx/-Xms:指定Java虚拟机的最大/最小堆内存大小。例如,-Xmx1024m表示最大堆内存为1GB。

  3. -XX:MaxPermSize/-XX:MetaspaceSize:指定最大永久代/元空间大小。在Java 8之前,Java虚拟机使用永久代来存放类信息等数据,而在Java 8之后则改为使用元空间。

  4. -Xss:指定线程栈大小,默认为512KB。该选项适用于控制线程调用深度等场景。

  5. -classpath/-cp:指定Java类路径。多个路径之间可以使用分号或冒号分隔开。

  6. -D:指定系统属性。例如,-Duser.dir=/home/user表示将系统属性"user.dir"设置为"/home/user"。

二、非标准选项

非标准选项是一些Java虚拟机特有的选项,它们的行为可能因具体虚拟机的实现而异。常见的非标准选项包括:

  1. -XX:+PrintGC/-XX:+PrintGCDetails/-XX:+PrintGCTimeStamps:指定Java虚拟机在进行垃圾回收时打印相关信息,例如垃圾回收时间、空间利用率等。

  2. -XX:PermSize:指定永久代大小。该选项已废弃,在Java 8之后请使用-XX:MetaspaceSize选项。

  3. -XX:+UseParNewGC/-XX:+UseConcMarkSweepGC:指定Java虚拟机使用Parallel New垃圾回收器或CMS垃圾回收器。

  4. -XX:SurvivorRatio:指定新生代中Eden区与Survivor区的比例。例如,-XX:SurvivorRatio=8表示Eden区与一个Survivor区的大小比为8:1。

  5. -XX:MaxTenuringThreshold:指定对象进入老年代的阈值。默认为15,也可以通过设置-XX:+PrintTenuringDistribution选项来打印各个年龄段对象的分布情况。

  6. -XX:UseCompressedOops:开启指针压缩。指针压缩可以有效减少堆内存的使用空间,提高性能。

  7. -XX:HeapDumpOnOutOfMemoryError:指定Java虚拟机在发生内存溢出时生成堆转储文件。

三、不稳定选项

不稳定选项是一些尚处于试验阶段的选项,它们的行为可能会随着Java虚拟机版本的升级而发生改变。常见的不稳定选项包括:

  1. -XX:+UnlockExperimentalVMOptions:启用实验性选项。

  2. -XX:+UseShenandoahGC:指定Java虚拟机使用Shenandoah垃圾回收器。

  3. -XX:+UseZGC:指定Java虚拟机使用ZGC垃圾回收器。

  4. -XX:+UseNUMA:开启Non-Uniform Memory Access(NUMA)优化,可提高多CPU、多内存节点系统下的性能。

  5. -XX:BiasedLockingStartupDelay:指定偏向锁延迟启动的时间,默认为4秒。

除了上述常用的Java虚拟机启动参数之外,还有许多其他的参数可供使用。例如,通过-Xprof可以打印出方法调用的堆栈信息和时间消耗等,而通过 -XX:CMSInitiatingOccupancyFraction参数可以设置CMS垃圾回收器触发的初始占用率百分比阈值等。

总之,在使用Java虚拟机时,合理设置启动参数是提高Java应用程序性能、稳定性和安全性的重要手段之一。