当前位置: 首页 > news >正文

Java常用命令、JVM常用命令

文章目录

  • 前言
  • 一、内存相关
  • 二、GC参数
  • 三、资源限制
  • 四、调试与监控参数


前言

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

http://www.dtcms.com/a/298042.html

相关文章:

  • RAG面试内容整理-3. 向量检索原理与常用库(ANN、FAISS、Milvus 等)
  • blender基本操作
  • flutter TextField 失去焦点事件
  • Qt:qRegisterMetaType函数使用介绍
  • 安全风险监测平台:被动应对向主动预防的转变
  • Ethereum:告别 personal API,拥抱 Geth 的独立签名器 Clef
  • [HarmonyOS] Harmony LiteOS-A 驱动框架深度解析:HDF 让万物互联更简单
  • EC 技术赋能:福佑防爆风扇如何平衡安全与节能?
  • JVM相关面试八股
  • Mysql实现高可用(主从、集群)
  • Unity GC 系列教程第五篇:高级 GC 内核
  • Python(32)Python内置函数全解析:30个核心函数的语法、案例与最佳实践
  • IPv6网络排障详细步骤指南(附工具命令+配置检查点+典型案例)
  • 【MAC的VSCode使用】
  • Python 爬虫实战指南:按关键字搜索淘宝商品
  • 使用Redis实现MySQL的数据缓存
  • JavaScript前端加密技术:aes.js与crypto-js.js深度解析
  • 2025年7月25日训练日志
  • PWM信号控制电机
  • Creo 模块众多,企业如何按需灵活分配许可证资源?
  • 倒计时 1 天!深思考携超小端侧多模态大模型,在2025 WAIC H2-427展位等你解锁端侧新可能!
  • go语言基础教程:【2】基础语法:基本数据类型(整形和浮点型)
  • mybatis 差异更新法
  • gig-gitignore工具实战开发(三):gig add基础实现
  • k8s的service、deployment、探针详解
  • vue2用elementUI做单选下拉树
  • HC32 中断实现
  • ubuntu上将TempMonitor加入开机自动运行的方法
  • Python异常,模块与包
  • 电厂液压执行器自动化升级:Modbus TCP与DeviceNet的协议贯通实践