Java常用命令、JVM常用命令

文章目录


前言

以下内容以Oracle JDK 21为例,以下内容仅展示部分参数,完整参数请查阅文档。

官方文档:Java 命令


一、内存相关

-Xmn 设置分代收集器中年轻代的初始大小和最大大小。建议为堆的 1/4 到 1/2。可以使用 -XX:NewSize 来设置初始大小,-XX:MaxNewSize 来设置最大大小,而不是使用-Xmn选项来同时设置年轻代堆的初始和最大大小。

-Xms 设置堆的最小和初始大小。此值必须是 1024 的倍数,且大于 1 MB。如:-Xms512m 或 -Xms2g。-XX:InitialHeapSize 选项也可以用来设置初始堆大小。如果它在命令行上的 -Xms 之后出现,那么初始堆大小将设置为
-XX:InitialHeapSize 指定的值。

-Xmx 设置堆的最大大小。此值必须是 1024 的倍数,且大于 2 MB。-Xmx 选项相当于 -XX:MaxHeapSize

-Xss 设置线程堆栈大小。如:-Xss256k。此选项类似于 -XX:ThreadStackSize

-XX:MetaspaceSize 元空间初始大小。

-XX:MaxMetaspaceSize 设置元空间最大大小。默认情况下,大小不受限制。如:-XX:MaxMetaspaceSize=256m

-XX:NewRatio= 比率 设置年轻代与老年代大小的比率。默认情况下,此选项设置为 2。

-XX:SurvivorRatio= 比例 设置 Eden 空间与 Survivor 空间的比率。默认情况下,此选项设置为 8。

二、GC参数

垃圾收集器:

-XX:+UseG1GC 使用 G1 垃圾收集器。

-XX:+UseParallelGC 使用并行清除垃圾收集器。

-XX:+UseSerialGC 使用串行垃圾收集器。

-XX:+UseZGC 启用 Z 垃圾收集器 (ZGC)。

G1参数:

-XX:MaxGCPauseMillis= 时间 设置最大 GC 暂停时间的目标值(以毫秒为单位)。这是一个软目标,JVM 将尽力实现该目标。

-XX:G1HeapRegionSize= 大小 设置在使用垃圾优先 (G1) 收集器时 Java 堆细分成的区域大小。该值是 2 的幂,范围是 1 MB 到 32 MB。

-XX:G1NewSizePercent= 百分比 设置用作年轻代大小的最小堆百分比。默认值为 Java 堆的 5%。

-XX:G1MaxNewSizePercent= 百分比 设置堆大小的百分比,用作年轻代大小的最大值。默认值为 Java 堆的 60%。

-XX:G1HeapWastePercent= 百分比 设置您愿意浪费的堆内存百分比。当可回收百分比低于堆内存浪费百分比时,Java HotSpot VM 不会启动混合垃圾回收周期。默认值为 5%。

-XX:G1MixedGCCountTarget= 数字 设置标记后混合垃圾收集的目标次数。默认混合垃圾回收次数为 8 次。混合垃圾回收的目标是控制在此目标次数以内。

-XX:G1MixedGCLiveThresholdPercent 设置 G1 判断一个 Region 是否应该参与 Mixed GC 的"存活对象占比"阈值。默认占用率为 85%。

例:如果一个 Region 存活对象占 70%,低于 85%,则 G1 会在 Mixed GC 中回收它。如果占 90%,G1 认为回收收益太小,就跳过。

IHOP:

-XX:+G1UseAdaptiveIHOP 控制老年代占用率的自适应计算,默认是启用的。

G1 GC 中,IHOP 是"老年代使用率达到多少时触发并发标记周期"的阈值。

开启该参数后,JVM 会动态调整 IHOP 的触发阈值,根据之前 GC 周期耗时来预测什么时候该开始并发标记,从而避免 Full GC。

-XX:InitiatingHeapOccupancyPercent 设置老年代使用率达到多少百分比时,触发 G1 的并发标记周期。

默认情况下,初始值设置为 45%。值为 0 表示从一开始就不间断地进行并发 GC 循环,直到 G1 自适应地设置此值。

-XX:G1AdaptiveIHOPNumInitialSamples 设置在 G1 自适应 IHOP 生效前,需要收集多少个 GC 周期的数据样本。只有当样本数量达到该值,才会用来动态估算 IHOP 触发点。默认值为 3。

ZGC 参数:

XX:ZAllocationSpikeTolerance 设置 ZGC 的分配峰值容忍度。默认情况下,此选项设置为 2.0。(ZGC 会把当前分配速率加上一个额外的"突增系数"来做 GC 触发预测,避免内存用尽时才触发 GC。)

例如:当前内存使用:10 GB / 每秒分配速率:500 MB/s / GC 延迟:2s / ZAllocationSpikeTolerance = 2

预计未来 2 秒将分配:500MB/s * 2s = 1 GB

加上突增容忍:10 GB * 2% = 0.2 GB

总预估使用:11.2 GB

-XX:ZCollectionInterval 设置使用 ZGC 时两次 GC 循环之间的最大间隔(以秒为单位)。默认情况下,此选项设置为 0(禁用)。

-XX:ZFragmentationLimit= 百分比 设置 ZGC 可接受的最大堆碎片率(以百分比表示)。默认情况下,此选项设置为 25。使用较低的值将导致更积极地压缩堆,以消耗更多 CPU 时间为代价回收更多内存。

-XX:+ZProactive 使用 ZGC 时启用主动 GC 循环。默认情况下,此选项处于启用状态。当开启 ZProactive 时,ZGC 即使没有达到触发并发 GC 的阈值,也会定期主动执行。

-XX:+ZUncommit 使用 ZGC 时启用取消提交未使用的堆内存。默认情况下,此选项处于启用状态。取消提交未使用的堆内存将降低 JVM 的内存占用,并使该内存可供其他进程使用。(在一定条件下,把不再使用的堆内存返回给操作系统)

-XX:ZUncommitDelay= 秒 设置在取消提交之前堆内存必须处于闲置状态的时间(以秒为单位)。默认情况下,此选项设置为 300(5 分钟)。(当某段堆内存连续 300 秒都没被使用,ZGC 会把它从物理内存中释放掉,回收给操作系统。)

字符串去重:

-XX:+UseStringDeduplication 启用字符串去重。默认情况下,此选项处于禁用状态。要使用此选项,必须启用垃圾优先 (G1) 垃圾收集器。(Java 中的字符串是不可变的,且使用非常频繁,会造成大量重复的内容。)

-XX:StringDeduplicationAgeThreshold= 阈值 识别达到指定年龄且被视为可进行重复数据删除的 String 对象。此选项的默认值为 3

其他参数:

-XX:+DisableExplicitGC 禁用 System.gc() 方法。JVM 可执行 GC。

-XX:+ExplicitGCInvokesConcurrent 启用使用 System.gc() 请求调用并发 GC。此选项默认禁用,只能通过 -XX:+UseG1GC 选项启用。

-XX:+AggressiveHeap 启用 Java 堆优化。

-XX:ConcGCThreads= 线程 设置并发 GC 使用的线程数。

-XX:ParallelGCThreads= 线程 设置 Stop-the-world (STW) 工作线程的数量。

日志:

从 JDK 9 开始,JVM 引入了 统一日志系统(Unified Logging Framework),用 -Xlog 替代了以前大量零散的 -XX:+PrintGCXXX、-XX:PrintGCDetails 等日志参数。

-Xlog:gc 打印基础 GC 信息。(相当于-XX:+PrintGC)

-Xlog:gc* 打印详细 GC 日志。(相当于-XX:+PrintGCDetails)

-Xlog:safepoint 应用停顿时间、应用执行时间。(

-XX:+PrintGCApplicationStoppedTime

-XX:+PrintGCApplicationConcurrentTime)

-Xlog:gc+task*=debug 打印 GC 工作线程每个任务的耗时。(

-XX:+PrintGCTaskTimeStamps)

-Xlog:gc+heap=trace 每次GC前后打印堆信息。(-XX:+PrintHeapAtGC)

三、资源限制

-XX:ActiveProcessorCount= x 虚拟机将使用的 CPU 数量。

-XX:ErrorFile= 文件名 指定错误数据写入的路径和文件名。如:

-XX:ErrorFile=./hs_err_pid%p.log

XX:MaxDirectMemorySize 设置 java.nio 的最大总大小。如:

-XX:MaxDirectMemorySize=1m

四、调试与监控参数

-XX:+HeapDumpOnOutOfMemoryError 允许将 Java 堆转储到当前目录中的文件中。

-XX:HeapDumpPath= 路径 设置写入堆转储的路径和文件名。如:

-XX:HeapDumpPath=/var/log/java/java_heapdump.hprof

-XX:NativeMemoryTracking= 指定跟踪 JVM 本机内存使用情况的模式。

off 指示不跟踪 JVM 本机内存使用情况。如果未指定 -XX:NativeMemoryTracking 选项,则这是默认行为。

summary 仅跟踪 JVM 子系统(例如 Java 堆、类、代码和线程)的内存使用情况。

detail 除了跟踪 JVM 子系统的内存使用情况外,还要跟踪单个 CallSite 、单个虚拟内存区域及其提交区域的内存使用情况。

-XX:+OptimizeStringConcat 启用 String 连接操作的优化。

相关推荐
鼠鼠我捏,要死了捏1 小时前
Java 虚拟线程在高并发微服务中的实战经验分享
java·microservices·virtualthreads
武子康2 小时前
Java-82 深入浅出 MySQL 内部架构:服务层、存储引擎与文件系统全覆盖
java·开发语言·数据库·学习·mysql·spring·微服务
Rancemy2 小时前
rabbitmq 03
java·分布式·rabbitmq
惜.己2 小时前
pytest中使用skip跳过某个函数
开发语言·python·测试工具·pytest
姜暮儿3 小时前
C++ 性能优化
开发语言·c++
啊呦.超能力3 小时前
QT开发---多线程编程
开发语言·qt
铭哥的编程日记4 小时前
《从C风格到C++风格:内存管理的进化之路》
开发语言·c++
Dcs4 小时前
“SQL注入即服务”:一个10年历史系统的奇幻演变
java
秃了也弱了。4 小时前
reflections:Java非常好用的反射工具包
java·开发语言
Amagi.5 小时前
Java设计模式-代理模式
java·代理模式