JVM 参数说明(持续更新)

JVM 常用参数说明

参数名称默认值描述
-Xms -Xms,JVM启动时申请的最小Heap内存大小,默认为物理内存的 1/64 但小于 1G;
-Xmx -Xmx,JVM启动时申请的最大Heap内存大小, 默认为物理内存的 1/4 但小于 1G
-Xmn 指定新生代内存大小
-XX:SurvivorRatio 新生代 S0、S1 与 E 区的占用比例关系;HotSpot默认Eden和Survivor的大小比例为8∶1
-Xss 设置每个线程的堆栈大小
   
-XX:+UseG1GC 开启G1 垃圾收集机制
-XX:+AlwaysPreTouch false在调用main函数之前,使用所有可用的内存分页。这个选项可以用来测试长时间运行的系统,所有的内存都已被分配。默认这个选项是关闭的,也就是不会使用所有的内存分页。 
-XX:+AggressiveHeap falsejava堆最佳化设置。设置多个参数使长时间运行过的任务使用密集的内存分配。 默认这个选项时关闭的,也就是堆不是最佳化。
-XX:+PrintCompilationfalse打印类编译信息
-XX:+UnlockDiagnosticVMOptions 解锁 diagnostic 虚拟机参数
-XX:+ParallelRefProcEnabled 并行处理Reference,加快处理速度,缩短耗时
-XX:ParallelGCThreads 参数控制GC线程数
-XX:PreBlockSpin10自旋锁的自旋次数配置;JDK1.6+是自动开启的。
-XX:+TraceClassUnloading 跟踪卸载类信息
-XX:+TraceClassLoading 跟踪装载类信息
-XX:ParGCCardsPerStrideChunk 256控制GC工作线程的任务粒度,可以帮助不使用补丁而获得最佳性能,这个补丁用来优化新生代垃圾回收的卡表扫描时间; 每个线程处理的CardTable数量,默认是256个。每个线程每次处理大小为 256*512byte = 128K的StrideChunk,如果old gen大小4G,那么一共要处理 4G / 128K = 32K个StrideChunk
-XX:+BindGCTaskThreadsToCPUs 绑定GC线程到个别的CPU核
-XX:+UseGCTaskAffinity 使用affinity参数将任务分配给GC工作线程
   
-XX:+UseStringDeduplication 字符串去重
-XX:StringDeduplicationAgeThreshole3默认值3,字符串的最小存活年龄
-XX:+PrintStringDeduplicationStatistics 启用打印字符串去重统计(观察控制台)
   
XX:+TieredCompilation 开启JDK7的多层编译
-XX:CMSExpAvgFactor=percent 25指定垃圾收集消耗的时间百分比。默认这个数是25%
-XX:PretenureSizeThreshold 大于该值的大对象直接在老年代分配,避免在Eden区和Survivor区之间产生大量的内存复制(大对象一般指 需要大量连续内存的Java对象, 如很长的字符串和数组)
-XX:MaxTenuringThreshold15

对象在Eden出生如果经第一次Minor GC后仍然存活, 且能被Survivor容纳的话, 将被移动到Survivor空间中, 并将年龄设为1. 以后对象在Survivor区中每熬过一次Minor GC年龄就+1. 当增加到一定程度,将会晋升到老年代。也可以称作:年龄阀值

控制对象在经过多少次minor GC之后进入老年代,此参数只有在Serial 串行GC时有效

-XX:+PrintEliminateAllocations 查看标量替换情况
-XX:+EliminateAllocations 开启标量替换
-XX:+EliminateLocks 开启同步消除
-XX:+PrintClassHistogramBeforeFullGC  
-XX:+PrintClassHistogramAfterFullGC  
-XX:MaxDirectMemorySize 最大直接内存
-XX:MinHeapFreeRatio40%默认值为40%
-XX:MaxHeapFreeRatio70%默认为70%,当JVM空闲堆的大小大于70%时,JVM会减少Heap的大小到 -Xms 指定的大小
-Xnoclassgc  
-XX:+PrintFlagsInitial JVM 默认初始化参数
-XX:+PrintFlagsFinal 关闭CLASS的垃圾回收功能。在大量使用动态代理、CGLib等字节码框架的应用中一定要关闭该选项,开启VM的类卸载功能, 以保证方法区不会溢出
-XX:TLABWasteTargetPercent 来设置TLAB可占用的Eden Space
-XX:+PrintTLAB 查看TLAB空间的使用情况
-XX:+PrintCommandLineFlags  
-XX:+ExplicitGCInvokesConcurrent 命令JVM无论什么时候调用系统GC,都执行CMS GC,而不是Full GC。
-XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses 保证当有系统GC调用时,永久代也被包括进CMS垃圾回收的范围内。因此,通过使用这些标志,我们可以防止出现意料之外的”stop-the-world”的系统GC。
-XX:+HeapDumpBeforeFullGC  
   

 

垃圾收集器—— 新生代

1.Serial收集器

Serial收集器是Hotspot运行在Client模式下的默认新生代收集器, 它的特点是 只用一个CPU/一条收集线程去完成GC工作,且在进行垃圾收集时必须暂停其他所有的工作线程(”Stop The World“ -后面简称STW)。

2.ParNew收集器

ParNew收集器其实是前面Serial的多线程版本, 除使用多条线程进行GC外,包括Serial可用的所有控制参数、收集算法、STW、对象分配规则、回收策略等都与Serial完全一样。

 

 

-XX: +UseConcMarkSweepGC

JVM默认新生代收集器

 

 

3. Parallel Scavenge收集器

与ParNew类似, Parallel Scavenge也是使用复制算法, 也是并行多线程收集器. 但与其他收集器关注尽可能缩短垃圾收集时间不同, Parallel Scavenge更关注系统吞吐量。

 

MaxGCPauseMillis

毫秒数,收集器会尽量的保证垃圾回收耗时不超过设定的这个阀值,但是如果太小的话,会导致GC的频率增加。

 

GCTimeRatio

垃圾收集时间占总时间的比率,取值范围为:0 < GCTimeRatio < 100。

 

-XX:+UserAdaptiveSizePolicy

启用GC自适应的调节策略:不再需要指定 -Xmn、-XX:SurvivorRatio、-XX:PretenureSizeThreshold等细节参数,JVM会根据当前系统运行情况手机性能监控信息,动态调整这些参数以提供最合适的停顿时间或最大的吞吐量。

 

垃圾收集器—— 老年代

 

1.Serial Old 收集器

Serial Old是Serial收集器的老年代版本, 同样是单线程收集器,使用“标记-整理”算法。

160740_P6PJ_571282.png

2.Parallel Old收集器

Parallel Old是Parallel Scavenge收老年代版本, 使用多线程和“标记-整理”算法, 吞吐量优先, 主要与Parallel Scavenge配合在 注重吞吐量 及 CPU资源敏感 系统内使用。

161149_iFGD_571282.png

3.CMS收集器 *

CMS是一种以获取最短回收停顿时间为目标的收集器(CMS又称多并发低暂停的收集器), 基于”标记-清除”算法实现, 整个GC过程分为以下4个步骤:

(1). 初始标记(CMS initial mark)   —— (STW)

(2). 并发标记(CMS concurrent mark: GC Roots Tracing过程)

(3). 重新标记(CMS remark)    —— (STW)

(4). 并发清除(CMS concurrent sweep: 已死象将会就地释放, 注意: 此处没有压缩)

    初始标记仅只标记一下GC Roots能直接关联到的对象, 速度很快; 而重新标记则是为了修正并发标记期间因用户程序继续运行而导致标记产生变动的那一部分对象的标记记录, 虽然一般比初始标记阶段稍长, 但要远小于并发标记时间.

 

-XX:+UseCMSInitiatingOccupancyOnly

启用触发百分比

 

-XX:CMSInitiatingOccupancyFraction

GC触发阀值

 

-XX:+UseCMSCompactAtFullCollection

CMS 执行完 FullGC 后,会产生内存碎片,过多会导致无法分配大对象,而提前触发Full GC,因为该开关参数用于在执行一次碎片整理。

 

-XX:CMSFullGCsBeforeCompaction

 默认值为 0,每次都要进行碎片整理。在执行N次Full GC 后,不进行内存整理,接着来一次带碎片整理的。

 

4.分区收集- G1收集器

G1(Garbage-First)是一款面向服务端应用的收集器,主要目标用于配备多颗CPU的服务器治理大内存。

 

-XX:+UseG1GC

启用G1收集器.

 

 

JVM自带工具(图来自网络)

163446_puHU_571282.png

JVM 常用参数(图来自网络)

163457_Jiwv_571282.png

 

 

 

其他一些备忘录

 --conf spark.executor.extraJavaOptions= 
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9010
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false

 

GC参数, 备忘1:

-Xmx2048M -XX:MaxDirectMemorySize=1024M -XX:+PrintGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC -XX:+HeapDumpOnOutOfMemoryError

GC参数, 备忘2:

-XX:ConcGCThreads=3 -XX:+FlightRecorder -XX:G1HeapRegionSize=4194304 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/bruntime/logs -XX:InitialHeapSize=8589934592 -XX:MaxGCPauseMillis=100 -XX:MaxHeapSize=8589934592 -XX:+ParallelRefProcEnabled -XX:+PrintClassHistogram -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UnlockCommercialFeatures -XX:+UseCompressed

 GC参数, 备忘3:

CommandLine flags: -XX:InitialHeapSize=8589934592 -XX:MaxHeapSize=8589934592 -XX:MaxNewSize=2863312896 -XX:MaxTenuringThreshold=6 -XX:NewSize=2863312896 -XX:OldPLABSize=16 -XX:OldSize=5726621696 -XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:ThreadStackSize=256 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC 

 

 

查看直接内存占用大小

java -classpath .:${JAVA_HOME}/lib/sd-jdi.jar  DirectMemorySize  <pid>

转载于:https://my.oschina.net/Rayn/blog/842868

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值