jvm参数设置

编译器

编译属性

  • 打印动态编译详情 -xx: +PrintCompilation
  • 关闭分层编译 -XX:-TieredCompilation
  • 解释执行 '-XINT'
  • 编译执行 '-XCOM'
  • 禁止后台编译 -XX:-BackgroundCompilation
  • 打印方法内联 -XX:+PrintInlining
  • 打开虚拟机诊断模式 -XX:+UnlockDiagnosticVMOptions
  • 打印编译详情 -XX:+LogCompilation -XX:LogFile=<your_file_path>
  • 调整jit工做线程数量 '-XX:CIComplilerCount=N'

调整codeCache区域大小

  • 设置初始区域大小 -XX:InitialCodeCaheSize=<SIZE>
  • 设置其最大限制 -XX:ReservedCodeCacheSize=<SIZE>

热点阀门设置

  • 设置方法计数器门阀值 -XX:CompileThreshold=10000;java

  • 关闭方法计算器的热度衰减 -XX:-UseCounterDecay缓存

  • 设置半衰周期,单位是秒 -XX:CounterHalfLifeTime=20安全

  • 可间接调整回边计数器的阈值 -XX:OnStackReplacePercentage=100 并发

逃逸分析相关查看

  • 逃逸分析默认是关闭的,开启逃逸分析 -XX:+DoEscapeAnalysis
  • 查看分析结果 -XX:+PrintEscapeAnalysis
  • 开启标量替换 XX:+EliminateAllocations
  • 开启同步消除 -XX:+EliminateLocks
  • 查看标量的同步替换状况 -XX:+PrintEliminateAllocations

其余设置

安全点相关操做

  • 打印安全点 -XX:+PrintSafepointStatistics -XX:+PrintGCApplicationStoppedTime
  • jdk9之后打印安全点 -XX:+PrintSafepointStatistics -Xlog:safepoint

软引用的相关

-XX:SoftRefLRUPolicyMSPerMB=3000jvm

  • 若是设置,单位为毫秒;
  • 不设置,64位则为-Xmx的值为基准的剩余空间的M值为单位进行设置,即还剩1500M,值就为1500毫秒

字符串相关优化

  • 字符串缓存统计 -XX:+PrintStringTableStatistics
  • 设置字符串缓存大小 -XX:StringTableSize=N jdk 8的默认大小是756760

字符串重排

jdk8使用g1 gc后,加上以上参数,能够开启字符串重排 -XX:+UseStringDeduplication高并发

-XX:+UseStringDeduplication优化

拆装箱

-XX:AutoBoxCacheMax=N 自动拆装箱缓存值大小设置 ,默认是-128到127spa

-XX:AutoBoxCacheMax=20000 改成最大值2万线程

并发相关参数

  • 禁用偏斜锁,在高并发环境下,偏斜锁没法提升效率 -XX:-UseBiasedLocking

jVM内存设置

堆设置

  • 最大堆体积 -Xmx Value ,如-Xmx3000m
  • 初始堆大小 -Xms Value,如-Xms200m
  • 设置新生代和老年代大小比例,默认是2 -XX:newRatio=Value 如 -XX:newRatio=2
  • 设置新生代的值 -XX:NewSize=Value 如-XX:NewSize=800m
  • Survivor和eden的大小比例关系,默认是8:1; -XX:SurviorRatio=value 如 -XX:SurvivorRatio=8

堆外内存

direct memory,堆外内存是jvm内存的组成部分日志

  • 设置对外内存大小

-XX:MaxDirectMemorySize=512M

  • 是否开启本地内存跟踪;native method tracking NMT

-XX:NativeMemoryTracking=summary

jcmd <pid> VM.native_memory detail 

// 进行 baseline,以对比分配内存变化
jcmd <pid> VM.native_memory baseline

// 进行 baseline,以对比分配内存变化
jcmd <pid> VM.native_memory detail.diff

code参数设置

  • 设置初始code值 -XX:InitialCodeCacheSize=4095

  • 设置code最大值 -XX:ReservedCodeCacheSize=18M

元数据区设置

  • 最大元数据区空间大小 -XX:MaxMetaspaceSize=23m
  • 初始元数据区大小 -XX:MetaspaceSize=10M

栈大小

  • -Xss2M 栈初始大小

GC 设置

打印gc日志

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintReferenceGC

-XX:+PrintGCDetails

  • 打印gc详情

-XX:+PrintGCTimeStamps

  • 打印GC时间戳

  • -XX:PrintReferenceGC 打印引用gc日志

垃圾收集器

Serial GC

-XX:+UseSerialGC

ParNewGC和CMS GC

-XX:UseParNewGC -XX:UseConcMarkSweepGC

Parallel GC

  • 开启 -XX:UserParallelGC
  • 配置
-XX:MaxGCPauseMillis=value   //停顿value毫秒
-XX:GCTimeRatio=N   //GC时间和用户时间比例=1/(N+1),如设置49, 则为1/(1+49)既2%的时间

G1GC

  • 开启G1GC -XX:UseG1GC

  • 设置region区域大小; -XX:G1HeapRegionSzie=<N>, 例如 n=16

  • 设置在mixedGc中老年代regin的比例 -XX:G1MixedGCLiveThresholdPercent 默认是85

  • 混合垃圾收集期间,每次进入CSet的oldRegion的最大阈值;默认是java堆的10% -XX:G1OldCSetRegionThresholdPercent

  • 自适应老年代并发标志阀门值 -XX:+G1UseAdaptiveIHOP

  • 每次old并发标记完,mixedGc执行的次数,默认是8 -XX:G1MixedGCCountTarget=8

相关文章
相关标签/搜索