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

JVM参数速查

文章目录

    • 一、JVM运行时数据区参数列表
      • 1.1、通用参数
      • 1.2、堆空间常用参数
      • 1.3、Java栈参数
      • 1.4、元数据空间参数
      • 1.5、直接内存参数
      • 1.6、调试通用参数
      • 1.7、GC调试通用参数
    • 二、新生代垃圾收集器参数列表
      • 2.1、Serial收集器参数
      • 2.2、ParNew收集器参数
      • 2.3、ParallelScavenge收集器参数
    • 三、年老代垃圾收集器参数列表
      • 3.1、SerialOld收集器参数
      • 3.2、ParallelOld收集器参数
      • 3.3、CMS收集器参数
    • 四、整堆分区垃圾收集器参数列表
      • 4.1、G1收集器参数
      • 4.2、ZGC收集器参数
      • 4.3、ShenandoahGC收集器参数
    • 配置参考

在JVM的所有参数中,总体会被分为几种类型:标准参数(Standard)、非标准参数(Non-Standard)、高级运行时选项以及不建议使用(可能会被遗弃的)四大类,其中:

  • 标准参数:开头直接为参数名,例如:-server、-client等。
  • 非标准参数: -X开头,例如: -Xdebug、-XBatch等。
  • 高级选项:-XX:开头,例如:-XX:+UseG1GC、-XX:-UseG1GC等,其中+号代表开启,-号代表关闭。

上述简单介绍清楚JVM参数中,不同开头的参数代表的含义后,接下来开始罗列JVM中的参数列表。

当然,也可以根据其他维度定义为行为参数、性能调优参数、调试参数这类的。

一、JVM运行时数据区参数列表

虚拟机的运行时数据区中,堆空间无疑是最重要的,除堆空间之外,虚拟机栈/本地方法栈(HotSpot中二合一)、元数据空间、本地内存等区域也有对应的参数,接下来依次列出。

1.1、通用参数

  • -client:以客户端模式启动JVM。

  • -server:以服务器模式启动JVM。

  • -agentlib:装载本地lib库。

  • -agentpath: 按全路径装载本地库。

  • -classpath:声明jvm搜索目录名、jar、zip文档名,之间用分号;分隔。

  • -D property=value:设置系统[属性名/值]对。

  • 应用程序运行时可通过System.getProperty("property")获取。

  • -enableassertions:设置JVM是否启动断言机制,默认关闭(1.4开始支持的)。

  • 后续跟-esa代表开启,跟-dsa代表关闭。

  • -jar:指定以jar包的形式执行一个应用程序。

  • -javaagent:jarpath:指定JVM启动时装入java语言设备代理。

  • -verbose:这个参数比较有趣,可以用于输出JVM一些信息,如下:

  • 结尾跟:class:输出JVM类加载相关信息,JVM找不到类时可以用于排查。

  • 结尾跟:gc:输出每次GC相关的简略信息。

  • 结尾跟:jni:输出native方法调用的相关状况,可以用于诊断jni调用错误。

  • -version:输出当前机器Java环境版本信息。

  • -version:release:指定当前机器以某个特定的版本执行。

  • -version:"1.5.0_04 1.5*&1.5.1_02+":以1.5或比1.5更高的版本执行。

  • -help:输出Java所有标准参数及其描述。

  • -X: 输出非标准的参数列表及其描述。

  • -Xint:设置JVM以纯解释器模式执行。

  • -Xcomp:完全采用即时编译器模式执行程序。

  • -Xmixed:采用解释器+JIT即时编译器的混合模式共同执行。

  • -Xbatch:禁止JVM后台编译,将编译过程放到前台任务执行。

  • -Xbootclasspath:让Bootstrap从指定目录下加载库、jar、zip包。

  • 结尾跟/a:path:将指定路径的全部文件追加到默认bootstrap路径中。

  • 结尾跟/p:path:让JVM优先于bootstrap默认路径加载指定路径的文件。

  • -Xcheck:jni: 对JNI函数进行附加检查,校验传递给JNI函数参数的合法性。

  • -Xfuture:让JVM对类文件执行严格模式检查(默认不使用)。

  • -Xnoclassgc:关闭针对class的gc(开启后类不会被卸载/会导致OOM)。

  • -Xincgc: 开启增量gc,会减少停顿,但会导致吞吐量下降。

  • -Xprof:跟踪正运行的程序,适合于开发环境调试。

  • -Xrs:减小JVM对操做系统信号(signals)的使用。

  • -XX:DisableExplicitGC:禁止程序内部调用System.gc()触发GC。

  • -XX:MaxFDLimit:文件描述符的最大数量限制。

  • -XX:UseThreadPriorities:启用本地线程优先级。

  • -XX:UnlockExperimentalVMOptions:开启未知参数识别机制。

  • -XX:PrintFlagsInitial:输出当前程序的参数默认值。

1.2、堆空间常用参数

  • -Xms:JVM启动时堆空间大小。
  • -Xmx:堆空间的最大大小。
  • -XX:NewSize=n/-Xmn:分配年轻代的空间大小。
  • -XX:NewRatio=n:设置年轻代和年老代的比值。
  • -XX:SurvivorRatio:设置新生代中Eden区和Survivor区的大小比值。
  • - XX:TargetsurvivorRatio:设置Survivor区的目标使用率,默认为50%
  • -XX:MaxTenuringThreshold:设置年老代对象的晋升年龄。
  • -XX:PretenureSizeThreshold:指定直接进入年老代大对象的阈值。
  • -XX:MaxHeapFreeRatio:GC后允许堆中空闲内存占的最大比例。
  • -XX:MinHeapFreeRatio:GC后允许堆中空闲内存占的最小比例。
  • -XX:MaxNewSize:设置新生代内存的最大的可分配大小。
  • -XX:UseLargePages:开启大页面内存技术(大内存下使用)。
  • -XX:LargePageSizeInBytes:设置Java堆空间的大页面尺寸。
  • -XX:HandlePromotionFailire:是否开启空间分代担保机制。
  • -XX:HeapDumpOnOutOfMemoryError:堆空间首次发生OOM时输出dump日志。
  • -XX:HeapDumpPath:和上面的参数配套使用,指定输出的位置。
  • -XX:HeapDumpBeforeFullGC:在FullGCdump
  • -XX:HeapDumpAfterFullGC:在FullGCdump
  • -XX:OnOutOfMemoryError:当JVM首次发生OOM时,可以执行制定脚本。
  • -XX:+UseGCOverheadLimit:在抛出OOM前限制JVM耗费在GC上的时间比例。
  • -XX:UseAdaptiveSizePolicy:是否开启自适应堆比例调整机制(并行GC器)。
  • -XX:MaxGCPauseMillis:设置每次新生代垃圾回收的期望最大停顿时间。
  • -XX:UseCompressedOops:是否开启对象指针压缩机制。
  • -XX:CompressedClassSpaceSize:是否开启类指针压缩机制。
  • -XX:UseTLAB:是否开启TLAB分配机制。
  • -XX:TLABWasteTargetPercent:指定TLAB与整个Eden区的占比。
  • -XX:TLABSize:显示指定TLAB区域的大小。
  • -XX:ResizeTLAB:是否开启JVM自适应的TLAB大小自调整机制。
  • -XX:BiasedLockingStartupDelay:设置sync匿名偏向锁的延迟启动时间。
  • -XX:PreBlockSpin:指定Sync自旋锁次数(1.6被弃用,引入自适应自旋)。
  • -XX:PermSize:设置非堆空间初始大小(1.7后被弃用,改为元空间)。
  • -XX:MaxPermSize:设置非堆空间最大大小(1.7后被弃用,改为元空间)。
  • -XX:AlwaysPreTouch:是否开启物理内存分配替换虚拟内存分配。

1.3、Java栈参数

  • -Xss:设置虚拟机栈的默认大小。
  • -XX:ThreadStackSize:设置线程栈默认大小。
  • -XX:+DoEscapeAnalysis:是否开启逃逸分析机制。
  • -XX:PrintEscapeAnaysis:输出逃逸分析信息。
  • -XX:EliminateAllocations:是否开启标量替换机制。
  • -XX:EliminateLocks:是否开启同步消除机制。
  • -XX:PrintEliminateAllocations:输出标量替换信息。

1.4、元数据空间参数

  • -XX:MetaspaceSize:指定元数据空间的初始大小。
  • -XX:MaxMetaspaceSize:指定元数据空间的最大大小。
  • -XX:MinMetaspaceFreeRatio:FullGC后,允许元空间空闲内存的最小比例。
  • -XX:MaxMetaspaceFreeRatio:FullGC后,允许元空间空闲内存的最大比例。
  • -XX:MinMetaspaceExpansion:元空间内存不足时,设置增量内存的最小大小。
  • -XX:MaxMetaspaceExpansion:元空间内存不足时,设置增量内存的最大大小。
  • -XX:CompileThreshold:方法调用计数器编译触发阈值设置。
  • -XX:ReservedCodeCacheSize:热点代码缓存区的最大大小。
  • -XX:InitialCodeCacheSize:设置热点代码缓存区的初始大小。
  • -XX:+UseCodeCacheFlushing:热点代码空间已满时,取消部分冷代码的编译。
  • -XX:UseCounterDecay:是否开启热度衰减机制。
  • -XX:CounterHalfLifeTime:调整半衰周期的时间,单位为秒。
  • -XX:PrintCompilation:当方法被编译时输出相关信息。
  • XX:BackgroundCompilation:禁止JVM后台编译,将编译任务在前台执行。
  • -XX:CITime:JVM关闭时,输出各种编译的统计信息。
  • -XX:TraceClassLoading:跟踪类加载信息。
  • -XX:TraceClassLoadingPreorder:跟踪所有被使用的类加载信息。
  • -XX:TraceClassUnloading:跟踪类卸载信息。
  • -XX:TraceLoaderConstraints:跟踪类加载器相关信息。
  • -XX:TraceClassResolution:跟踪常量池信息。

1.5、直接内存参数

  • -XX:DirectMemorySize:设置直接内存的初始空间值(不设置默认与Xmx参数值相同)。
  • -XX:MaxDirectMemorySize:设置直接内存的最大空间值。

1.6、调试通用参数

  • -XX:+PrintVMOptions:输出当前运行程序的显式启动参数。
  • -XX:+PrintCommandLineFlags:输出传递给虚拟机的显式和隐式参数。
  • -XX:+PrintFlagsInitial:查看所有的参数的默认初始值。
  • -XX:+PrintFlagsFinal:输出所有的系统参数的最终值。
  • -XX:PrintTLAB:输出TLAB分配相关的信息
  • -XX:CITime:输出JIT即时编译的耗时。
  • -XX:ErrorFile:保存错误日志或者数据到文件中。
  • -XX:OnError=”;”:出现致命错误时执行自定义的指定脚本。

1.7、GC调试通用参数

  • -XX:+PrintGC/-verbose:gc:输出GC的简略日志。
  • -XX:+PrintGCDetails:输出GC发生时的详细日志。
  • -XX:+PrintGCTimeStamps:输出GC发生的时间。
  • -XX:+PrintGCApplicationConcurrentTime:输出应用程序的执行时间。
  • -XX:+PrintGCApplicationStoppedTime:输出应用由于GC而产生的停顿时间。
  • -Xloggc:将输出的GC日志转储到指定目录中。
  • -XX:+PrintReferenceGC:跟踪并输出软/弱/虚引用和Finallize队列信息。
  • -XX:+PrintHeapAtGC:每次GC前后打印堆信息。
  • -XX:PrintGCCause:输出导致本次GC触发的原因。

二、新生代垃圾收集器参数列表

上述阶段中,将一些JVM通用参数、JVM运行时数据区参数以及部分调试参数进行了简单整理,接下来看看GC相关的一些参数。

2.1、Serial收集器参数

  • -XX:UseSerialGC:是否启用Serial作为新生代收集器。

2.2、ParNew收集器参数

  • -XX:UseParNewGC:是否启用ParNew作为新生代收集器。

2.3、ParallelScavenge收集器参数

  • -XX:UseParallelGC:是否启用ParallelScavenge作为新生代收集器。
  • -XX:MaxGCPauseMillis:设置GC发生时允许的最大停顿时间。
  • -XX:GCTimeRatio:精准控制GC发生时的吞吐量占比。
  • -XX:UseAdaptiveSizePolicy:是否开启JVM自适应的GC调节策略。
  • -XX:ParallelGCThreads:指定GC工作时的并行线程数(默认为CPU核数)。

三、年老代垃圾收集器参数列表

3.1、SerialOld收集器参数

  • -XX:UseSerialGC:是否启用SerialOld作为年老代收集器。

3.2、ParallelOld收集器参数

  • -XX:UseParallelOldGC:是否启用ParallelOld作为年老代收集器。

3.3、CMS收集器参数

  • -XX:UseConcMarkSweepGC:是否启用CMS作为年老代收集器。
  • -XX:UseCMSInitiatingoccupancyonlyn:指定触发CMS回收的阈值。
  • -XX:CMSInitIatingOccupancyFaction:指定空间占用达到多少比例时触发MSC工作。
  • -XX:+UseCMSInitiatingOccupancyOnly:强制设定的回收阈值,达到即触发GC。
  • -XX:UseCMSCompactAtFullCollection:内存碎片化严重时是否开启MSC工作。
  • -XX:CMSFullGCsBeforeCompaction:设置间隔多少次FullGC触发一次MSC工作,默认0
  • -XX:ParallelCMSThreads:指定CMS执行GC工作时的并发线程数。
  • -XX:CMSClassUnloadingEnabled:是否开启类元数据卸载(回收)机制。
  • -XX:CMSInitiatingPermOccupancyFraction:指定元空间GC的触发比例。
  • -XX:GCTimeRatio:指定GC停顿时间与用户线程工作时间的占比。
  • -XX:MaxGCPauseMillis:指定一次GC允许发生的最大停顿时间。
  • -XX:CMSIncrementalMode:是否启用增量回收模式(1.8中被废弃,1.9中移除)。
  • -XX:CMSScavengeBeforeRemark:是否在重新标记阶段前触发一次新生代GC。
  • -XX:CMSMaxAbortablePrecleanTime:默认为5s,表示AbortablePreclean阶段的最大时间。
  • -XX:CMSScheduleRemarkEdenPenetration:指定Eden区使用比例超过N%时,就结束预清理阶段进入remark阶段。
  • -XX:CMSParallellnitialMarkEnabled:在初始阶段是否采用多线程执行。
  • -XX:CMSParallelRemarkEnabled:在重新标记阶段是否采用多线程执行。
  • -XX:CMSClassUnloadingEnabled:在正常GC阶段中清除过期的class数据,不等到FullGC时再清除。

四、整堆分区垃圾收集器参数列表

4.1、G1收集器参数

  • -XX:+UseG1GC:让JVM使用G1收集器。

  • -XX:ConcGCThreads:指定并发GC工作阶段的并发线程数量。

  • -XX:ParallelGCThreads:指定STW阶段,GC工作的并行线程数。

  • -XX:MaxGCPauseMillis:期望的目标停顿时间(默认200ms)。

  • -XX:GCPauseIntervalMillis:GC的间隔时间。

  • -XX:G1HeapRegionSize:指定单个分区大小(1~32MB,且必须是2的N次幂)。

  • -XX:G1NewSizePercent:新生代初始空间占比(默认整堆的5%)。

  • -XX:G1MaxNewSizePercent:新生代最大空间占比。

  • GCTimeRatio:GC停顿的时间占比(G1会根据此值调整堆空间)。

  • -XX:TargetSurvivorRatio:G1中空间分配担保的触发比例。

  • Survivor空间达到填充容量阈值时(默认50%),将对象转入年老代。

  • -XX:MaxTenuringThreshold:新生代空间对象的晋升年龄阈值(默认15)。

  • -XX:InitiatingHeapOccupancyPercent:年老代空间触发MixedGC的阈值。

  • -XX:GCPauseIntervalMillis:设置停顿间隔时间(作用于G1-回收阶段)。

  • -XX:ExplicitGCInvokesconcurrent:对显示调用触发的GC是否启用并发回收。

  • -XX:G1ReservePercent:预留年老代的空闲Region数,为分代担保做准备,默认10

  • 默认为整堆45%,年老代空间使用比例达到该阈值时触发混合GC。

  • -XX:G1MixedGCLiveThresholdPercent:单个Region触发GC的垃圾占比阈值。

  • 默认为85%,单个分区中垃圾对象达到该阈值时才可被选作目标区域回收。

  • -XX:G1MixedGCCountTarget:指定回收阶段时,分为几次筛选回收。

  • 默认8次,在G1最后的筛选回收阶段可以回收一段时间,然后暂停回收,恢复系统运行,过一会儿再回收,这样做可以让系统不至于单次停顿时间过长。

  • -XX:G1HeapWastePercent:GC回收停止的空闲Region阈值(默认5%)。

  • 回收阶段是基于复制算法来完成的,回收一个分区时会将该区内的所有存活对象移入到另外一个区域,然后统一清除该分区,这样最终就会出现一个空的Region,而当空闲的Region数量达到5%时,G1会结束本次MixedGC

  • -XX:G1OldCSetRegionThresholdPercent:每轮MixedGC回收分区的最大比例,默认10%

  • -XX:SoftRefLRUPolicyMSPerMB:指定每兆空间中软引用的存活时间,默认为1000ms

  • -XX:G1UseAdaptiveIHOP:是否开启G1-IHOP分析预测机制(默认开启)。

  • -XX:ParallelRefProcEnabled:是否启用并发引用处理机制(默认关闭)。

  • -XX:G1RSetUpdatingPauseTimePercent:降低处理Rset记忆集时的停顿时间。

  • -XX:G1RSetRegionEntries:降低RSet粗化的程度。

  • -XX:G1SummarizeRSetStatsPeriod:诊断参数,可以查看Rset的周期频率报告。

4.2、ZGC收集器参数

  • -XX:UnlockExperimentalVMOptions:是否解锁JVM隐藏的额外参数(实验参数)。
  • -XX:UseZGC:是否启用ZGC作为JVM整堆的垃圾收集器。
  • -XX:ZCollectionInterval:定期触发一次GC(默认不开启,单位:秒)。
  • -XX:ZProactive:设置ZGC主动触发GC的阈值(默认开启)。

4.3、ShenandoahGC收集器参数

  • -XX:UseShenandoahGC:是否启用ShenandoahGC作为JVM整堆的垃圾收集器。

配置参考

8GB 的服务器

  • 为操作系统预留 2GB 内存,保障操作系统运行流畅,将剩余的 6GB 内存分配给应用程序
  • 通过 -XX:MaxDirectMemorySize-2g 设置:将 2GB(应用程序可用内存的1/3)内存预留给直接内存(可用的最大堆外内存)
  • Java 堆的大小:将 3GB 分配给 Java 堆: -Xm3g -Xmx3g
  • 确定新生代和老年代的大小:由于没有特殊的大对象和过多长生命周期的对象,所以可以将堆内存的 1/3 分配给新生代,也就是 -XX:NewSize=1g,将其他剩余的 2GB 内存分配给老年代。 Survivor 区和 Eden 区的配置可以采用官网建议的值,不做特殊设置
  • 确定元空间区:应用程序及其依赖的 JAR 包不大,所以可通过 XX:MetaspaceSize=128m 设置元空间大小为 128MB
  • 配置 GC:最后设置垃圾回收器、OOM 异常数据转储路径和 GC 日志。使用 -XX:+UserConcMarkSweepGC 可设置老年代使用 CMS 垃圾回收器,新生代使用默认的 ParNew 垃圾回收器。使用 -XX:+UseG1GC 可设置使用 G1 垃圾回收器
java -server
-XX:MaxDirectMemorySize=2g # 直接内存的大小为 2GB
-Xms3g -Xmx3g # Java 堆内存的大小为 3GB
-XX:NewSize=1g # 新生代的大小为 1GB
-XX:MetaspaceSize=128m # 元空间为 128MB
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC # 新生代使用 ParNewGC,老年代使用 CMS
-xx:+HeapDumponCutOfMemoryError # 在发生 OOM 时打印日志
-XX:HeapDumpPath=dump.log # OOM 日志存储地址
-XX:+PrintGC # 输出 GC 日志
-XX:+PrintGCDetails # 输出 GC 的详细日志
-XX:+PrintGCDatestamps # 输出 GC 的时间戳
-XX:+PrintHeapAtGC # JVM 在执行 GC 操作的前后打印堆的信息
-Xlogge:../gc/gc.log # GC日志的输出地址
-jar start.jar
http://www.dtcms.com/a/435394.html

相关文章:

  • STM32定时器的整体概述
  • AI-调查研究-92-具身智能 机器人运动控制全解析:从传统模型到深度学习方法
  • 河南和城乡建设厅网站军队采购网
  • Sql 优化篇大全,干货
  • 类似于美团的网站怎么做的wordpress4.8.3
  • 今日分享 位运算
  • 【Java EE】MyBatis 全面详解
  • 南宁网站 制作wordpress怎么登陆ftp
  • JSON 与 Form Data 在接口测试中的技术对比与应用指南
  • 网站建设制作微商授权书个人博客网站设计的目的
  • 51c自动驾驶~合集36
  • 天猫魔盒M19技凡科技定制版OS刷机教程
  • 临沧网站建设安徽智能网站建设
  • 【MySQL初阶】05-CRUD-Create
  • 2017 年真题配套词汇单词笔记(考研真相)
  • 网站建设app开发网上装修公司网站策划书
  • 【开题答辩全过程】以 springboot类站酷设计师为例,包含答辩的问题和答案
  • 做网站社区赚钱吗wordpress 收邮件
  • 温州苍南网站建设大型免费网站制作
  • Spring Boot 热部署配置与禁用
  • 专门建立网站的公司吗青岛物流网站建设
  • 网站开发网站设计素材p2p理财网站开发
  • 什么是域名 空间 网站源代码韩国女足出线
  • 给客户做网站建设方案wordpress中文变英文
  • 江西省建设工程造价管理局网站使用wordpress的网站
  • Java Web综合项目实战 - 西蒙购物网
  • Photoshop - Photoshop 更改图像大小
  • 整理k8s中Pod、Deployment和Service的spec配置项--图文篇
  • 网站备案以后怎么做网站建设属于销售费用
  • [QT]常用控件一