JVM常用启动参数大全(附带解释)
目录
一、官网
二、堆相关
三、方法区相关
四、执行引擎相关
五、垃圾回收相关
六、内存分配与垃圾回收的参数列表
一、官网
官网说明:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
查看jvm启动参数:jinfo -flag NewRatio pid
二、堆相关
-XX:+PrintFlagsInitial:查看所有的参数的默认初始值
-XX:+PrintFlagsFinal:查看所有的参数的最终值(可能会存在修改,不再是初始值)
-Xms200m,(b、k、m、g,大小写皆可)用于表示堆区的起始内存,等价于-XX:InitialHeapSize(默认为物理内存的1/64)
-Xmx200m,(b、k、m、g,大小写皆可)则用于表示堆区的最大内存,等价于-XX:MaxHeapSize(默认为物理内存的1/4)
-XX:+PrintGCDetails,控制台打印堆、GC信息
-XX:+PringGC 、-verbose:gc ,打印gc简要信息
-XX:NewRatio=2,表示新生代占1,老年代占2,新生代占整个堆的1/3
-XX:SurvivorRatio=8,表示Eden空间和另外两个Survivor空间缺省所占的比例是8:1:1
-XX:-UseAdaptiveSizePolicy,表示关掉自适应内存分配策略(否则会自动分配内存空间,使-XX:SurvivorRatio=8并不完全生效)
-Xmn,设置新生代最大内存大小,跟“-XX:SurvivorRatio”冲突
-XX:MaxTenuringThreshold=<N>,进行设置对象在Survivor经历几次GC进入老年代
-XX:HandlePromotionFailure=<boolean>,空间分配担保(大量对象在MinorGC之后仍然还有很多,那么这些对象可以直接放到老年代)
HandlePromotionFailure注意:
1.在发生Minor GC之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。
如果大于,则此次Minor GC是安全的。
如果小于,则虚拟机会查看-XX:HandlePromotionFailure设置值是否允许担保失败。
如果HandlePromotionFailure=true,那么会继续检查老年代最大可用连续空间是否大于历次晋升到老年代的对象的平均大小。
如果大于,则尝试进行一次Minor GC,但这次Minor GC依然是由风险的;
如果小于,则改为进行一次Full GC。
如果HandlePromotionFailure=false,则改为进行一次Full GC。
2.在JDK6 Update24之后,HandlePromotionFailure参数不会再影响到虚拟机的空间分配担保策略,观察OpenJDK中的源码变化,虽然源码中还定义了HandlePromotionFailure参数,但是在代码中已经不会再使用它。JDK6 Update24之后的规则变为只要老年代的连续空间大于新生代对象总大小或者历次晋升的平均大小就会进行Minor GC,否则将进行Full GC。(相当于HandlePromotionFailure就是true)
-XX:UseTLAB,设置是否开启TLAB空间
-XX:TLABWasteTargetPercent,设置TLAB空间所占用Eden空间的百分比大小
-XX:+DoEscapeAnalysis,显式开启逃逸分析(JDK 6u23之后默认开启)。
-XX:+PrintEscapeAnalysis,查看逃逸分析的筛选结果。
-XX:+EliminateAllocations,开启了标量替换(默认打开),允许将对象打散分配在栈上。
三、方法区相关
-XX:PermSize来设置永久代初始分配空间。默认值是20.75M(jdk7及以前才能用)
-XX:MaxPermSize来设定永久代最大可分配空间。32位机器默认是64M,64位机器默认是82M(jdk7及以前才能用)
-XX:MetaspaceSize和-XX:MaxMetaspaceSize(jdk8及以后替换为这俩,windows下,-XX:MetaspaceSize是21M,-XX:MaxMetaspaceSize的值是-1,即没有限制)
MaxDirectMemorySize 设置直接内存,默认与堆的最大值-Xmx参数一致。
四、执行引擎相关
-XX:CompileThreshold设置方法调用计数器阈值,默认阈值在Client模式下是1500次,在Server模式下是10000次。超过这个阈值,就会触发JIT编译。
-XX:-UseCounterDecay来关闭热度衰减,让方法计数器统计方法调用的绝对次数。
-XX:CounterHalfLifeTime参数设置半衰周期的时间,单位是秒
-Xint:完全采用解释器模式执行程序;
-Xcomp:完全采用即时编译器模式执行程序。如果即时编译出现问题,解释器会介入执行。
-Xmixed:采用解释器+即时编译器的混合模式共同执行程序。
-XX:+UnlockExperimentalVMOptions -XX:+UseJVMCICompiler去激活,才可以使用jdk10加入的Graal编译器。
-XX:StringTableSize可以设置StringTable的长度。
-XX:+PrintStringTableStatistics,打印字符串常量池信息
UseStringDeduplication(bool):开启String去重,默认是不开启的,需要手动开启。
PrintStringDeduplicationStatistics(bool):打印详细的去重统计信息。
StringDeduplicationAgeThreshold(uintx):达到这个年龄的String对象被认为是去重的候选对象。
-XX:+HeapDumpOnOutOfMemoryError:报oom时生成堆dump文件
五、垃圾回收相关
-XX:+PrintCommandLineFlags:查看命令行相关参数(包含使用的垃圾收集器)
-XX:+UseSerialGC参数可以指定年轻代和老年代都使用串行收集器
“-XX:+UseParNewGC”手动指定使用ParNew收集器执行内存回收任务。它表示年轻代使用并行收集器,不影响老年代。
-XX:ParallelGCThreads限制线程数量,默认开启和CPU数据相同的线程数。
· -XX:+UseParallelGC 手动指定年轻代使用Parallel并行收集器执行内存回收任务。
· -XX:+UseParallelOldGC 手动指定老年代都是使用并行回收收集器。
分别适用于新生代和老年代。默认jdk8是开启的。
上面两个参数,默认开启一个,另一个也会被开启。(互相激活)
· -XX:ParallelGCThreads 设置年轻代并行收集器的线程数。一般地,最好与CPU数量相等,以避免过多的线程影响垃圾收集性能。
在默认情况下,当CPU数量小于8个,ParallelGCThreads的值等于CPU数量。
当CPU数量大于8个,ParallelGCThreads的值等于3 + [5 * CPU_Count / 8]。
· -XX:MaxGCPauseMillis 设置垃圾收集器最大停顿时间(即STW的时间)。单位是毫秒。
为了尽可能地把停顿时间控制在MaxGCPauseMills以内,收集器在工作时会调整Java堆大小或者其他一些参数。
对于用户来讲,停顿时间越短体验越好。但是在服务器端,我们注重高并发,整体的吞吐量。所以服务器端适合Parallel,进行控制。
该参数使用需谨慎。
· -XX:GCTimeRatio 垃圾收集时间占总时间的比例(=1 / (N + 1))用于衡量吞吐量的大小。
取值范围(0, 100)。默认值99,也就是垃圾回收时间不超过1%。
与前一个-XX:MaxGCPauseMillis参数有一定的矛盾性。暂停时间越长,Radio参数就容易超过设定的比例。
· -XX:+UseAdaptiveSizePolicy 设置Parallel Scavenge收集器具有自适应调节策略(默认开启)。
在这种模式下,年轻代的大小、Eden和Survivor的比例、晋升老年代的对象年龄等参数会被自动调整,已达到在堆大小、吞吐量和停顿时间之间的平衡点。
在手动调优比较困难的场合,可以直接使用这种自适应的方式,仅指定虚拟机的最大堆、目标的吞吐量(GCTimeRatio)和停顿时间(MaxGCPauseMills),让虚拟机自己完成调优工作。
· -XX:+UseConcMarkSweepGC 手动指定使用CMS收集器执行内存回收任务。开启该参数后会自动将-XX:+UseParNewGC打开。即:ParNew(Young区用)+CMS(Old区用)+Serial Old的组合。
· -XX:CMSInitiatingOccupanyFraction 设置堆内存使用率的阈值,一旦达到该阈值,便开始进行回收。
JDK5及以前版本的默认值为68,即当老年代的空间使用率达到68%时,会执行一次CMS回收。JDK6及以上版本默认值为92%。
如果内存增长缓慢,则可以设置一个稍大的值,大的阈值可以有效降低CMS的触发频率,减少老年代回收的次数可以较为明显地改善应用程序性能。反之,如果应用程序内存使用率增长很快,则应该降低这个阈值,以避免频繁触发老年代串行收集器。因此通过该选项便可以有效降低Full GC的执行次数。
· -XX:+UseCMSCompactAtFullCollection 用于指定在执行完Full GC后对内存空间进行压缩整理,以此避免内存碎片的产生。不过由于内存压缩整理过程无法并行执行,所带来的问题就是停顿时间变得更长了。
· -XX:CMSFullGCsBeforeCompaction 设置在执行多少次Full GC后对内存空间进行压缩整理。
· -XX:ParallelCMSThreads 设置CMS的线程数量。CMS默认启动的线程数是(ParallelGCThreads+3)/4,ParallelGCThreads是年轻代并行收集器的线程数。当CPU资源比较紧张时,受到CMS收集器线程的影响,应用程序的性能在垃圾回收阶段可能会非常糟糕。
· -XX:+UseG1GC 手动指定使用G1收集器执行内存回收任务。
· -XX:G1HeapRegionSize 设置每个Region的大小。值是2的幂,范围是1MB到32MB之间,目标是根据最小的Java堆大小划分出约2048个区域。默认是堆内存的1/2000。
· -XX:MaxGCPauseMillis 设置期望达到的最大GC停顿时间指标(JVM会尽力实现,但不保证达到)。默认值是200MS。
· -XX:ParallelGCThread 设置STW工作线程数的值。最多设置为8。
· -XX:ConcGCThreads 设置并发标记的线程数。将n设置为并行垃圾回收线程数(ParallelGCThreads)的1/4左右。
· -XX:InitiatingHeapOccupancyPercent 设置触发并发GC周期的Java堆占用阈值。超过此值,就触发GC。默认值是45。
六、内存分配与垃圾回收的参数列表
-XX:+PrintGC 输出GC日志。类似:-verbose:gc
-XX:+PrintGCDetails 输出GC的详细日志
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如2021-05-05T21:55:55.234+0800)
-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
-Xloggc:../logs/gc.log 日志文件的输出路径
-XX:+UnlockExperimentalVMOptions -XX:+UseZGC 使用ZGC
-XX:+TraceClassLoading查看类的加载顺序。
JVM常用启动参数大全(附带解释)相关推荐
- JVM调优系列:(五)JVM常用调试参数和工具
转自:http://blog.csdn.net/opensure/article/details/46715769 JVM常用调试参数: –verbose:gc在虚拟机发生内存回收时在输出设备显示信息 ...
- JVM 常用配置参数(Java 8)
日志 -XX:+PrintFlagsFinal,打印JVM所有参数的值 -XX:+PrintGC,打印GC信息 -XX:+PrintGCDetails,打印GC详细信息 -XX:+PrintGCTim ...
- 【JVM虚拟机】JVM的启动参数设置
JVM的启动参数设置 1.标准参数(-) -client:一般在pc机器上使用的模式,启动很快,但性能和内存管理效率并不高,多用于桌面应用 -server:使用server模式,启动速度慢,多用于服务 ...
- k3595参数_常用晶体管参数大全
常用晶体管参数大全Daten ohne Gewahr 2N109 GE-P 35V 0.15A 0.165W | 2N1304 GE-N 25V 0.3A 0.15W 10MHz 2N1305 GE- ...
- Docker容器启动参数大全与详细说明
< Docker容器启动参数大全与详细说明 > 语法: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] Docker 容器启动示例,这儿以启动 ...
- chrome常用启动参数
chrome常用启动参数 `chrome`添启动参数 `chrome`浏览器`启动参数`参考: 常用启动参数--仅供参考 功能增强参数 使用HEVC硬件解码---Windows以外平台需要提供解码包 ...
- IDEA 如何配置JVM虚拟机启动参数
IDEA 如何配置JVM虚拟机启动参数 在读<深入理解Java虚拟机>中有个IDE设置JVM的启动参数(VM Arg),小编用的IDEA不知道如何设置,所以写个博客记录一下 下面的两个箭头 ...
- Java 启动参数大全
2019独角兽企业重金招聘Python工程师标准>>> java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容: 其二是非标准参数 ...
- JVM常用内存参数配置
一. 常用参数 -Xms JVM启动时申请的初始Heap值,默认为操作系统物理内存的1/64但小于1G.默认当空余堆内存大于70%时,JVM会减小heap的大小到-Xms指定的大小,可通过-XX ...
最新文章
- luogu P1027 Car的旅行路线
- DevOps简单介绍
- 周志华《机器学习》西瓜书出全新视频课啦!
- myemployees库的四张表介绍
- (转)使用异步Python 3.6和Redis编写快速应用程序
- 带你读AI论文丨LaneNet基于实体分割的端到端车道线检测
- Maven学习总结(49)——Maven Profile详解
- linux笔记:linux帮助命令,man,help,whatis,apropos
- JSP+JavaBean+Servlet+Oracle新增功能中对Date类型的字段的处理
- 用迅雷下载百度网盘的文件
- 在雨雾中穿行--张家界之旅103
- 证明:二阶导函数大于零时为凹函数
- java.sql.SQLException: Incorrect string value: '\xE6\x88\x91\xE7\x9A\x84...' for column 'groupName'
- 小案例:基于python的动态时钟,带十二时辰和经络养身
- 哔哩哔哩作者页上的作品批量保存的方法
- Duilib corner属性
- 解决umi 不是内部或外部命令,也不是可运行程序问题
- 一只喵的西行记-8 魔法猫堡
- 自媒体创作的注意事项,一篇好的文章需要具备哪些要素?
- 【LeetCode Python实现】ZJ27 字典树
热门文章
- JDK/Dubbo/Spring 三种 SPI 机制,谁更好呢?
- 在使用net start mysql命令时提示键入 net helpmsg 3523错误
- mysql导出数据表 .xls_mysql数据库导出xls-自定义
- stm32 str转hex_【SW4STM32生成 hex文件的设置方法】
- python 判断类型_青少年之Python编程课程安排lt;第一季gt;
- vue修改计算属性的值_八.Vue计算属性
- 三星android 7.0 root,三星G9300 7.0 root教程及获取7.0的root权限
- 7 centos ssh 单机_centos7单机安装kafka
- 中央空调如何调节温度html,中央空调怎么调温度
- python 中反斜杠在字符串过长的正确用法