当前位置: 首页 > 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.lryc.cn/news/599232.html

相关文章:

  • Android Room 持久化库:简化数据库操作
  • pycharm安装教程-PyCharm2023安装详细步骤【MAC版】【安装包自取】
  • PyCharm高效开发全攻略
  • IP证书:构建数字世界知识产权安全防线的基石
  • Java零基础入门学习知识点2-JDK安装配置+Maven
  • Qwen3-235B-A22B-Thinking-2507 - 开源思维推理模型的新标杆
  • 深入解析Hadoop YARN如何避免资源死锁:机制与实战
  • Androidstudio 上传当前module 或本地jar包到maven服务器。
  • C++调用GnuPlot一维绘图
  • 微信小程序中英文切换miniprogram-i18n-plus
  • 三、Spark 运行环境部署:全面掌握四种核心模式
  • day33:零基础学嵌入式之网络——HTTP服务端
  • GaussDB 逻辑备份实操
  • 《剑指offer》-数据结构篇-链表
  • Java 大视界 -- Java 大数据机器学习模型在金融衍生品市场波动特征挖掘与交易策略创新中的应用(363)
  • MySQL存储引擎深度解析与实战指南
  • 电科金仓新一代数据库一体机:国产化方案替换优质选择
  • Java研学-RabbitMQ(三)
  • LeetCode 391:完美矩形
  • SQL164 2021年11月每天新用户的次日留存率
  • 虚拟地址-物理地址
  • 关于“PromptPilot”
  • jwt 验证方法 (ASP.NET Core)
  • Uniapp编写微信小程序,绘制动态圆环进度条
  • Linux——线程(下)
  • uniapp小程序上传图片并压缩
  • 【MacOS】发展历程
  • 基于 Nginx 与未来之窗防火墙构建下一代自建动态网络防护体系​—仙盟创梦IDE
  • 好看的小程序推广单页HTML源码 可用作导航页
  • 校园二手交易小程序的设计与实现