JVM 启动参数

JVM 启动参数是用于配置 Java 虚拟机行为的命令行选项,通常在启动 Java 应用程序时指定。以下是一些常用的 JVM 启动参数分类及其用途:

1. 内存管理参数

  • -Xms<size> : 设置 JVM 初始化时的堆内存大小。例如 -Xms512m 表示启动时分配 512MB 的堆内存。

  • -Xmx<size> : 设置 JVM 可以使用的最大堆内存大小。例如 -Xmx1024m 表示最大可用 1024MB 的堆内存。

  • -Xss<size> : 设置每个线程的堆栈大小。例如 -Xss1m 表示每个线程分配 1MB 的堆栈内存。

  • -XX:MetaspaceSize=<size>: 设置元空间(Metaspace)的初始大小。元空间用于存放类的元数据。JDK 8 及之后取代了永久代(PermGen)。

  • -XX:MaxMetaspaceSize=<size>: 设置元空间的最大大小。如果不指定,默认情况下元空间会自动增长。

2. 垃圾回收器 (GC) 参数

  • -XX:+UseSerialGC: 使用串行垃圾收集器(适合单处理器机器或小堆内存)。

  • -XX:+UseParallelGC: 使用并行垃圾收集器(适合多处理器机器)。

  • -XX:+UseConcMarkSweepGC: 使用并发标记-清除垃圾收集器(CMS),适合对延迟敏感的应用程序。

  • -XX:+UseG1GC: 使用 G1 垃圾收集器,适合处理大内存应用。

  • -XX:MaxGCPauseMillis=<n>: 设置最大 GC 停顿时间,单位是毫秒。

  • -XX:+PrintGCDetails: 打印详细的 GC 日志。

  • -XX:+PrintGCDateStamps: 在 GC 日志中打印时间戳。

  • -Xloggc:<file>: 将 GC 日志输出到指定文件中。

3. 性能调优参数

  • -XX:+AggressiveOpts: 开启 JVM 的一些实验性性能优化选项。

  • -XX:+UseCompressedOops: 在 64 位 JVM 上启用压缩指针(在大多数现代 JVM 中默认启用)。

  • -XX:+DisableExplicitGC : 禁用显式调用 System.gc() 的垃圾收集。

  • -XX:+TieredCompilation: 启用分层编译,结合 C1 和 C2 编译器来提高启动性能和长期性能。

  • -XX:+AlwaysPreTouch: 在 JVM 启动时预先触摸所有内存页,减少运行时的延迟(启动会变慢)。

4. 调试与诊断参数

  • -Xdebug: 启用调试模式。

  • -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005: 配置远程调试,监听 5005 端口。

  • -XX:+HeapDumpOnOutOfMemoryError: 在内存不足(OutOfMemoryError)时生成堆转储文件。

  • -XX:HeapDumpPath=<file>: 指定堆转储文件的路径。

  • -XX:+PrintCommandLineFlags: 打印所有默认的 JVM 命令行选项。

5. 类加载和字节码参数

  • -XX:+TraceClassLoading: 打印类加载信息。

  • -XX:+TraceClassUnloading: 打印类卸载信息。

  • -XX:MaxPermSize=<size>: 设置永久代(PermGen)的最大大小(适用于 JDK 7 及之前版本)。

6. 其他常用参数

  • -D<name>=<value> : 设置系统属性,System.getProperty("<name>") 可以访问这些属性。例如 -Dspring.profiles.active=prod

  • -XX:+UseStringDeduplication: 启用字符串去重,减少内存中的重复字符串(适用于 G1 GC)。

  • -XX:+ExitOnOutOfMemoryError : 当 JVM 遇到 OutOfMemoryError 时自动退出,避免继续运行可能导致更严重的错误。

示例启动命令

bash 复制代码
java -Xms512m -Xmx1024m -Xss1m -XX:+UseG1GC -XX:+PrintGCDetails -jar your-spring-boot-app.jar

总结

JVM 启动参数提供了强大的控制能力,可以根据应用程序的需求和运行环境进行调优。选择和配置合适的参数可以提高性能、稳定性和可维护性。

相关推荐
Tingjct11 小时前
线程详细讲解---聚焦linux
linux·服务器·jvm
myy-learn11 小时前
32 SQLITE数据库
jvm·数据库·sqlite
wuminyu14 小时前
JVM锁膨胀与Futex源码解析
java·linux·c语言·jvm·c++
郝学胜-神的一滴14 小时前
C++11 工程级应用 08:Lambda表达式与Tuple元组
开发语言·jvm·c++·python·程序人生·开源
袋鼠云数栈1 天前
整库迁移与分库分表同步:批量数据搬迁的配置简化思路
jvm·数据库·oracle
Mr. zhihao1 天前
JVM 偏向锁 4 秒延迟:从源码动机到 JEP-374 废弃全链路
jvm·并发·偏向锁
孙克旭_1 天前
JVM 入门详解:JVM、JRE、JDK 区别,JVM 基础结构梳理
java·开发语言·jvm
随遇而安zx1 天前
【地基篇】---JVM 内存结构知识点(Java 8 运行时数据区深度解析)
java·开发语言·jvm
恒拓高科WorkPlus2 天前
企业如何搭建安全内部通讯平台|企业内部通讯平台怎么选才更安全?
jvm·数据库·安全
随遇而安zx2 天前
【地基篇】---JVM 类加载 源码解析(基于 Java 8)
java·jvm·python