大家好,我是锋哥。今天分享关于【常用的JVM启动参数有哪些?】面试题。希望对大家有帮助;
常用的JVM启动参数有哪些?
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
JVM 启动参数是启动 Java 应用程序时用于控制 Java 虚拟机行为的命令行选项。这些参数通常用来设置 JVM 的内存大小、垃圾回收器、调试选项等。常用的 JVM 启动参数分为两大类:标准选项和非标准选项。下面是一些常用的 JVM 启动参数。
一、标准选项
-
内存设置相关参数
-Xms<size>
:设置 JVM 启动时堆的初始大小。<size>
可以是 KB、MB、GB 等单位(如-Xms512m
)。-Xmx<size>
:设置 JVM 最大堆大小。<size>
同样可以是 KB、MB、GB 等单位(如-Xmx1024m
)。-Xmn<size>
:设置新生代大小。新生代包含年轻代(Young Generation)和旧生代(Old Generation),这个参数控制新生代的大小(如-Xmn256m
)。
-
垃圾回收器相关参数
-XX:+UseSerialGC
:使用串行垃圾回收器,这是一种基于单线程的垃圾回收器,适用于小型应用。-XX:+UseParallelGC
:使用并行垃圾回收器,这种垃圾回收器适用于多核 CPU 和多线程的环境。-XX:+UseConcMarkSweepGC
:使用并发标记-清除(CMS)垃圾回收器,适用于低停顿的应用。-XX:+UseG1GC
:启用 G1 垃圾回收器,它是一种低延迟、高吞吐量的垃圾回收器,适用于大内存应用。-XX:SurvivorRatio=<ratio>
:设置年轻代中 Eden 区和 Survivor 区的大小比例。比如-XX:SurvivorRatio=8
表示 Eden 区大小为 Survivor 区的 8 倍。
-
JVM 调试和诊断相关参数
-Xdebug
:启用 JVM 的调试模式。-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005
:启用 JDWP(Java Debug Wire Protocol),用于远程调试,address=5005
是调试端口号,suspend=n
表示不暂停应用程序启动,server=y
表示启动调试服务端。-XX:+PrintGCDetails
:打印垃圾回收的详细信息。-XX:+PrintGCDateStamps
:打印垃圾回收的时间戳。
-
JVM 性能调优参数
-XX:+AggressiveOpts
:启用一些未正式发布的优化选项,可以提高应用程序的性能。-XX:+UseCompressedOops
:启用指针压缩,用于在 64 位 JVM 中减少对象的内存占用,通常用于 32 位指针的优化。-XX:MaxMetaspaceSize=<size>
:设置元空间(Metaspace)的最大大小,元空间用于存放类的元数据。默认情况下,JVM 会自动调整它的大小,使用该参数可以限制其最大值。
-
类加载器相关参数
-classpath
或-cp
:指定类路径。该参数用于指定 JVM 在启动时查找类文件的路径,可以包含 JAR 文件或目录(如-cp /path/to/classes:/path/to/libs/*
)。-D<name>=<value>
:定义系统属性,用于设置应用程序的配置参数。例如-Duser.timezone=GMT
用于设置时区。
-
JVM 进程控制参数
-Xrs
:减少操作系统对 JVM 的控制,通常用于避免对 JVM 的线程调度干扰。它可以减少 JVM 与操作系统之间的信号交互。-XX:+ExitOnOutOfMemoryError
:在发生内存溢出时,JVM 会立即退出程序。
二、非标准选项
这些选项不一定会在所有版本的 JVM 中有效,因为它们属于 JVM 的实现特性,可能在不同版本之间有所变化。
-
JVM 内存管理
-XX:InitialHeapSize=<size>
:设置 JVM 堆内存的初始大小,默认由-Xms
控制。-XX:MaxHeapFreeRatio=<percentage>
:设置最大空闲堆内存的比例,JVM 会在堆内存使用量大于该值时进行堆扩展。-XX:MinHeapFreeRatio=<percentage>
:设置最小空闲堆内存的比例。
-
垃圾回收调优
-XX:ParallelGCThreads=<count>
:设置垃圾回收时使用的并行线程数,默认情况下该参数会根据 CPU 核心数进行设置。-XX:ConcGCThreads=<count>
:设置 CMS 垃圾回收器使用的并发线程数。-XX:MaxTenuringThreshold=<threshold>
:设置对象从年轻代晋升到老年代的年龄阈值,默认值通常为 15。
-
JVM 启动优化
-XX:+UseStringDeduplication
:启用字符串去重,在内存中避免创建多个相同的字符串对象。-XX:+OptimizeStringConcat
:优化字符串连接操作,通过减少内存分配来提高性能。
-
JVM 特性控制
-XX:+UnlockDiagnosticVMOptions
:启用一些诊断选项。-XX:+DisableExplicitGC
:禁用System.gc()
的显式垃圾回收调用,防止应用程序手动触发垃圾回收。
-
JVM 输出控制
-XX:+PrintFlagsFinal
:打印 JVM 参数及其当前值。-XX:+PrintCompilation
:打印 JIT 编译信息。
三、JVM 版本相关的参数
有些参数和选项与特定版本的 JVM 相关。比如:
-XX:+UseZGC
:启用 ZGC(Z Garbage Collector),是 JDK 15 之后的一个低延迟垃圾回收器。-XX:+UseShenandoahGC
:启用 Shenandoah 垃圾回收器(JDK 12 及以后的版本)。-XX:TieredStopAtLevel
:设置 JIT 编译的停止级别。
四、总结
JVM 启动参数可以用来优化和调节 Java 程序的运行环境,开发者可以根据实际需求选择合适的参数来提升应用的性能、稳定性以及调试和监控能力。常用的参数通常涉及内存、垃圾回收、调试、性能优化等方面。