JVM 常用参数

JVM 参数类型:

  1. 标准: -开头,所有的 HotSpot 都支持
  2. 非标准:-X 开头,特定版本 HotSpot 支持特定命令,不能保证所有 JVM 实现都支持它们,并且它们可能会发生变化。
  3. 高级选项:-XX 开头,这些是开发人员选项,用于调整 Java HotSpot 虚拟机操作的特定区域,这些区域通常具有特定的系统要求,并且可能需要对系统配置参数的特权访问。也不能保证所有 JVM 实现都支持它们,并且它们可能会发生变化。

可以使用 java -XX:+PrintFlagsFinal –version打印所有 -XX 默认参数信息,manageable表示是可以运行时修改的参数(通过 jinfo 命令)

内存分配

  • 虚拟机栈:–Xss默认 1M,不同系统或有不同。-Xss256k
  • 方法区
    • jdk 1.7 以前(永久代)-XX:PermSize -XX:MaxPermSize
    • jdk 1.8 以后(元空间,本地内存)-XX:MetaspaceSize -XX:MaxMetaspaceSize默认无限制
    • -Xms最小值
    • -Xmx最大值
    • -Xmn新生代大小
    • -XX:NewSize新生代最小值
    • -XX:MaxNewSize新生代最大值
    • -XX:SurvivorRatioEden 与 Survivor 区的比例
  • 直接内存(堆外内存)
    • -XX:MaxDirectMemorySize设置大小,默认是堆的最大值(配置的最大值减去一个Survivor的大小)
    • -XX:NativeMemoryTracking=detail开启 NMT,跟踪直接内存的使用情况(Native方法)
  • -XX:+AlwaysPreTouch在 JVM 启动的时候,就把所有的内存在操作系统进行分配

内存溢出日志:

  • -XX:-HeapDumpOnOutOfMemoryErrorOOM 时输出一个 dump 文件,默认关闭,推荐在生产服务器开启
  • -XX:HeapDumpPath=./java_pid<pid>.hprofdump 文件的存储路径,默认是 java 进程启动位置

GC

策略:

  • -XX:MaxTenuringThreshold进入老年代的 GC 年龄,默认15,CMS是6
  • -XX:PretenureSizeThreshold直接进入老年代的大对象的大小
  • -XX:HandlePromotionFailure空间分配担保
  • -Xnoclassgc禁止回收 Class 对象
  • -XX:+DisableExplicitGC禁止在运行期显式地调用 System.gc()

日志:

  • -XX:+PrintGC -XX:+PrintGCDetails
  • -XX:+PrintHeapAtGC每次一次 GC 后,都打印堆信息
  • -XX:+PrintGCTimeStamps在每个 GC 上打印时间戳
  • -XX:+PrintGCDateStamps在每个 GC 上打印时间戳,以日期的形式
  • -XX:+PrintGCApplicationConcurrentTime打印应用程序时间
  • -XX:+PrintGCApplicationStoppedTime打印暂停时长
  • -XX:+PrintReferenceGC记录回收了多少种不同引用类型的引用
  • -Xlogger:logpathGC 日志路径

垃圾回收器:

  • Serial/Serial Old: -XX:+UseSerialGC
  • ParallerGC/Parallel Old: -XX:+UseParallelGC
    • -XX:MaxGCPauseMillis最大停顿时间
    • -XX:GCTimeRatio垃圾收集时间占总时间的比率
    • -XX:+UseAdaptiveSizePolicy动态调整,默认开启
    • -XX:+ParallelGCThreads并行收集器的线程数
  • ParNew/CMS: -XX:+UseConcMarkSweepGC
    • -XX:+UseCMSCompactAtFullCollection默认开启,无法分配大对象和发生 FGC 时,使用 Serial Old 进行内存碎片整理
    • -XX:CMSInitiatingOccupancyFraction使用多少比例的老年代后开始 CMS 收集,默认是 68%(近似值),如果频繁发生 SerialOld 卡顿,应该调小(频繁CMS 回收)
    • -XX:CMSFullGCsBeforeCompaction多少次 FGC 之后进行压缩
    • -XX:+CMSClassUnloadingEnabled启用类卸载,默认启用
    • -XX:CMSInitiatingPermOccupancyFraction达到什么比例时进行 Perm 回收(永久代),JDK 8 中不推荐使用此选项,不能替代
    • -XX:GCTimeRatio设置 GC 时间占用程序运行时间的百分比(不推荐使用)
    • -XX:MaxGCPauseMillis停顿时间,是一个建议时间,GC 会尝试用各种手段达到这个时间,比如减小年轻代
  • G1: -XX:+UseG1GC
    • -XX:G1HeapRegionSizeRegion 大小,1MB ~ 32MB ,2 的 N 次幂
    • -XX:MaxGCPauseMillis最大 GC 暂停时间
    • -XX:GCPauseIntervalMillisGC 的间隔时间
    • -XX:G1NewSizePercent新生代最小比例,默认为 5%
    • -XX:G1MaxNewSizePercent新生代最大比例,默认为 60%
    • -XX:GCTimeRatioGC时间建议比例,G1 会根据这个值调整堆空间
    • -XX:ConcGCThreads线程数量
    • -XX:InitiatingHeapOccupancyPercent启动 G1 的堆空间占用比例,根据整个堆的占用而触发并发 GC 周期
    • -XX:MaxGCPauseMillis设置最大 GC 暂停时间的目标(以毫秒为单位)。这是一个软目标,并且 JVM 将尽最大的努力(G1 会尝试调整 Young 区的块数来)来实现它。默认情况下,没有最大暂停时间值。

优化

TLAB:-XX:+UseTLAB本地线程分配缓冲,默认开启

  • -XX:TLABSize设置 TLAB 大小
  • -XX:+PrintTLAB打印 TLAB 的使用情况

JIT:

  • -XX:+DoEscapeAnalysis逃逸分析,默认开启
  • -XX:+PrintEscapeAnalysis查看逃逸分析的筛选结果
  • -XX:ReservedCodeCacheSize限制 JIT CodeCache 的大小
  • -XX: CompileThreshold方法调用计数器阈值。默认客户端模式下是 1500 次,在服务端模式下是 10000 次
  • -XX:FreqInlineSize经常执行的方法,默认情况下,方法体大小小于 325 字节的都会进行方法内联
  • -XX:MaxInlineSize不是经常执行的方法,默认情况下,方法大小小于35 字节才会进行方法内联
  • -XX:+PrintInlining将内联方法打印出来
  • -XX:+EliminateLocks开启锁消除, JDK 108 默认开启
  • -XX:+EliminateAllocations开启标量替换,JDK 1.8 默认开启
  • -XX:+PrintEliminateAllocations查看标量的替换情况

禁用偏向锁:-XX:-UseBiasedLocking默认开启
压缩指针技术:-XX:+UseCompressedOops默认开启

JVM 诊断:-XX:+UnlockDiagnosticVMOptions解锁对 JVM 进行诊断的选项参数,开启后支持一些特定参数对 JVM 进行诊断

类加载

  • -Xverify:none关闭大部分的类验证措施

  • -Xbootclasspath指定 Bootstrap Class Loader 加载路径

  • -Djava.ext.dirs指定 Extention Class Loader 加载目录

  • -verbose:class打印类加载详细过程

  • -XX:+TraceClassLoading打印 class 加载的过程和具体的 class 信息

日志

JVM 参数:

  • -XX:+PrintVMOptions可在程序运行时,打印虚拟机接受到的命令行显示参数
  • -XX:+PrintFlagsFinal打印所有的 JVM 参数
  • -XX:+PrintFlagsInitial查看所有 JVM 参数启动的初始值

编译:

  • -XX:+PrintCompilation打印编译过程信息

其他

  • -XX:AutoBoxCacheMax修改 IntegerCache 的上限
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值