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 连接操作的优化。

相关推荐
来杯@Java16 分钟前
图书管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·mybatis·课程设计
卷毛的技术笔记1 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
编程大师哥1 小时前
匿名函数 lambda + 高阶函数
java·python·算法
isyangli_blog1 小时前
OpenDayLight (Carbon 版本) 启动与组件安装
开发语言·php
vb2008111 小时前
FastAPI APIRouter
开发语言·python
Benszen1 小时前
KVM虚拟化解决方案
开发语言·perl
会编程的土豆1 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
東雪木1 小时前
多线程与并发编程 专属复习笔记
java·开发语言·笔记·java面试
adrninistrat0r1 小时前
Java调用链MCP分析工具
java·python·ai编程
杨充2 小时前
1.3 浮点型数据设计灵魂
开发语言·python·算法