随笔 - 100  文章 - 1  评论 - 0  阅读 - 13340 

JVM 参数遵循一定的命名和使用规律,这些参数可以根据其前缀分为几类,每类都有特定的用途和格式。下面是关于 -X-XX-D 开头的 JVM 参数的一些常见规律:

-X 参数

  • 含义:非标准选项,通常用于设置内存大小和其他与性能相关的参数。

  • 示例:

    • -Xms<size>:设置初始 Java 堆大小。
    • -Xmx<size>:设置最大 Java 堆大小。
    • -Xss<size>:设置每个线程的堆栈大小。
  • 特点:

    • 这些参数不是 JVM 规范的一部分,但被广泛支持。
    • 参数名和值之间没有空格。
    • 通常用于调整内存分配和垃圾收集行为。

-XX 参数

  • 含义:更高级的非标准选项,提供对 JVM 内部行为的细粒度控制,如垃圾回收策略等。

  • 示例:

    • -XX:MaxMetaspaceSize=<size>:设置元空间的最大大小。
    • -XX:+UseG1GC:启用 G1 垃圾收集器。
    • -XX:NewRatio=<ratio>:设置年轻代和老年代的比例。
  • 特点:

    • 这些参数提供了更多的灵活性和控制能力。
    • 可以通过 + 或 - 来启用或禁用某些功能(例如 -XX:+UseG1GC 启用 G1 GC,-XX:-UseG1GC 禁用 G1 GC)。
    • 有些参数需要指定具体的数值(例如 -XX:MaxMetaspaceSize=256m)。
    • 参数名和值之间通常有空格。

-D 参数

  • 含义:用于定义系统属性(System Properties),可以在应用程序中通过 System.getProperty 获取。

  • 示例:

    • -Dfile.encoding=UTF-8:设置文件编码为 UTF-8。
    • -Djava.awt.headless=true:启用无头模式(headless mode)。
    • -Duser.timezone=UTC:设置用户的时区为 UTC。
  • 特点:

    • 这些参数允许你在运行时传递自定义的系统属性。
    • 参数名和值之间使用等号 = 分隔。
    • 在应用程序中可以通过 System.getProperty("property.name") 获取这些属性的值。

其他常用参数

  • -server:选择服务器级别的 JVM 优化。
  • -client:选择客户端级别的 JVM 优化。
  • -cp 或 -classpath:设置类路径。
  • -version:显示 JVM 版本信息。
  • -showversion:显示版本信息并继续执行命令。
  • -verbose:启用详细输出。
  • -ea 或 -enableassertions:启用断言。
  • -da 或 -disableassertions:禁用断言。

小结

参数前缀含义示例及说明
-X 非标准选项,用于设置内存大小和其他性能相关参数。 -Xms512m:设置初始堆内存为 512MB。<br>-Xmx2g:设置最大堆内存为 2GB。
-XX 更高级的非标准选项,提供对 JVM 内部行为的细粒度控制。 -XX:MaxMetaspaceSize=256m:设置元空间最大大小。<br>-XX:+UseG1GC:启用 G1 GC。
-D 用于定义系统属性,可以在应用程序中通过 System.getProperty 获取。 -Dfile.encoding=UTF-8:设置文件编码为 UTF-8。

 

通过理解和使用这些参数,你可以更好地控制和优化 JVM 的行为,从而提高应用程序的性能和稳定性。在实际使用中,建议根据具体的应用需求进行适当的配置,并通过测试来验证配置的效果。


比如:

  • -Xms512m:设置 JVM 的初始堆内存大小为 512MB。
  • -Xmx2g:设置 JVM 的最大堆内存大小为 2GB。
  • -XX:MaxMetaspaceSize=256m:设置元空间的最大大小为 256MB。
  • -XX:+UseG1GC:启用 G1 垃圾收集器。
  • -Dfile.encoding=UTF-8:定义系统属性 file.encoding 为 UTF-8

这些参数允许开发者根据具体的应用需求来调整 JVM 的行为,从而优化性能、调试问题或者满足特定的功能需求。

 

常见参数详细举例

参数前缀参数名称示例配置含义及说明
-X -Xms -Xms512m 设置 JVM 的初始堆内存大小。例如:-Xms512m 表示初始堆内存为 512 MB。
-X -Xmx -Xmx2g 设置 JVM 的最大堆内存大小。例如:-Xmx2g 表示最大堆内存为 2 GB。
-X -Xss -Xss512k 设置每个线程的堆栈大小。例如:-Xss512k 表示每个线程的堆栈大小为 512 KB。
-XX -XX:MaxMetaspaceSize -XX:MaxMetaspaceSize=256m 设置元空间的最大大小(Java 8 及之后)。例如:-XX:MaxMetaspaceSize=256m 表示元空间最大为 256 MB。
-XX -XX:NewRatio -XX:NewRatio=2 设置年轻代和老年代的比例。例如:-XX:NewRatio=2 表示年轻代与老年代的比例是 1:2。
-XX -XX:SurvivorRatio -XX:SurvivorRatio=8 设置 Eden 区和 Survivor 区的比例。例如:-XX:SurvivorRatio=8 表示 Eden 与一个 Survivor 区的比例是 8:1。
-XX -XX:+UseG1GC -XX:+UseG1GC 启用 G1 垃圾收集器。G1 是一种并行且并发的垃圾收集器,适用于大内存应用。
-XX -XX:+UseParallelGC -XX:+UseParallelGC 启用 Parallel 垃圾收集器。这种收集器利用多核处理器并行执行垃圾收集。
-XX -XX:+UseConcMarkSweepGC -XX:+UseConcMarkSweepGC 启用 CMS(Concurrent Mark Sweep)垃圾收集器。CMS 是一种低延迟的垃圾收集器,适合于响应时间敏感的应用。
-XX -XX:HeapDumpPath -XX:HeapDumpPath=/tmp/heapdump.hprof 指定当发生 OutOfMemoryError 时生成堆转储文件的位置。例如:-XX:HeapDumpPath=/tmp/heapdump.hprof
-XX -XX:ErrorFile -XX:ErrorFile=/var/log/java_error.log 指定 JVM 在遇到严重错误时生成的错误日志文件位置。例如:-XX:ErrorFile=/var/log/java_error.log
-D -D<property>=<value> -Dfile.encoding=UTF-8 定义系统属性。例如:-Dfile.encoding=UTF-8 设置文件编码为 UTF-8。
-server -server -server 选择服务器级别的 JVM 优化。通常提供更好的性能,但启动时间较长。
-client -client -client 选择客户端级别的 JVM 优化。通常启动较快,但可能牺牲一些运行时性能。
-cp 或 -classpath -cp <path> -cp /lib/classes:/lib/lib.jar 设置类路径。例如:-cp /lib/classes:/lib/lib.jar 设置类路径为 /lib/classes 和 /lib/lib.jar
-version -version -version 显示 JVM 版本信息。
-showversion -showversion -showversion 显示版本信息并继续执行命令。
-verbose -verbose -verbose:class 启用详细输出。例如:-verbose:class 会打印加载的类信息。
-ea 或 -enableassertions -ea -ea 启用断言。
-da 或 -disableassertions -da -da 禁用断言。

 

假设你想配置一个具有以下特性的 JVM:

  • 初始堆内存为 512MB
  • 最大堆内存为 2GB
  • 每个线程的堆栈大小为 512KB
  • 使用 G1 垃圾收集器
  • 当发生 OutOfMemoryError 时,在 /tmp 目录下生成堆转储文件
  • 设置文件编码为 UTF-8

你的 VM options 可以这样设置:

深色版本
-Xms512m -Xmx2g -Xss512k -XX:+UseG1GC -XX:HeapDumpPath=/tmp/heapdump.hprof -Dfile.encoding=UTF-8

注意事项

  • 确保根据你的硬件资源合理配置内存大小。
  • 不同版本的 Java 可能支持不同的选项,确保使用的选项与你所使用的 JDK 版本兼容。
  • 对于生产环境,建议进行详细的性能调优和测试,以找到最佳的配置。

通过这些参数,你可以更好地控制和优化 JVM 的运行环境,从而提高应用程序的性能和稳定性。

posted on   卡米i  阅读(35)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示