记录本人曾经接触过的部分JVM参数,以便于之后查阅,在不同版本和运行环境上,可能会出现部分指令无效的情况,还需自行验证,部分指令涉及到两个或者多个分类,只存放在最贴近的分类

JAVA堆

  • -XX:NewRatio=2 设定新生代:老年代比例为1比2,即年轻代占堆三分之一
  • -XX:SurvivorRatio=8 设定两个Survivor:eden比例为2比8,即一个Survivor占十分之一
  • -XX:MaxTenuringThreshold-15 设置年轻代晋升老年代需要的年龄
  • -XX:PretenureSizeThreshold 设置大对象直接进入老年代的阈值
  • -Xms512M 初始化时512M堆内存
  • -Xms2018M 最大分配2G堆内存
  • -Xmn256M 最小分配256M堆内存
  • -Xmn1024M 设置年轻代大小为1G
  • -XX:MinHeapFreeRatio 堆空间最小空闲比例,小于这个比例时尝试扩展
  • -XX:MaxHeapFreeRatio 堆空间最大空闲比例,大于这个比例是开始压缩
  • -XX:NewSize 设定新生代的大小
  • -XX:TargetSurvivorRatio 设置Survivor去可使用率,超过这个比例会进行年轻代晋升到老年代

方法区

  • -XX:MaxPermSize=128M 方法区/永久代大小最大分配128M
  • -XX:PremSize 初始化时方法区的大小

虚拟机栈

  • -Xss1M 设置每个线程的栈大小为1M
  • -XX:ThreadStackSize=512 线程栈大小

本地方法栈

-Xoss10M

垃圾回收

  • -XX:+UseSerialGc 对年轻代,老年代使用串行回收器
  • -XX:+UseParallelGC 对年轻代使用并行收集器,老年代使用仍使用单线程Mark-Sweep-Compact垃圾会收取
  • -XX:+UseParNewGC 对年轻代使用并行回收收集期,老年代仍使用串行收集器
  • -XX:ParallelGCThreads=16 设置并行收集器的线程数,最好和处理器数目相等
  • -XX:+UseParallelOldGC 对年轻代、老年代进行并行回收处理器
  • -XX:GCTimeRatio 吞吐量大小,范围在0到100,系统GC时间占总时间的比例不超过 1/(1+n),默认n是99,即1/100=1%
  • -XX:+UseAdaptiveSizePolicy 并行收集器会自动选择年轻代区大小和区比例,达到预期的最长回收时间,如果采用并行收集器建议长开启
  • -XX:+UseConcMarkSweepGc 对年轻代使用并行收集器,老年代使用CMS
  • -XX:ParallelCMSThreads=5 设计CMS回收器的线程数量为5
  • -XX:CMSInitiatingOccupancyFraction 设置CMS回收器在老年代空间占比触发的比例,默认68%
  • -XX:+CMSClassUnloadingEnabled 设置CMS回收器对类元数据进行回收
  • -XX:+CMSParallelRemarkEnabled 设置CMS回收器并行重标记
  • -XX:CMSInitiatingPermOccupancyFraction 设置CMS回收器方法区占用率比例到达时,启动CMS回收,需要支持元数据回收才可以使用
  • -XX:UseCMSInitiatingOccupancyOnly 设置CMS回收器在到达阈值的时候才进行回收
  • -XX:+CMSIncrementalMode 使用增量模式,适合单CPU
  • -XX:+UseCMSCompactAtFullConnection 开启CMS回收器老年代的压缩,消除碎片
  • -XX:CMSFullGCsBeforeCompactioin=5 设置多少次Full GC会产生一次内存压缩
  • -XX:+UseG1GC 使用G1回收器
  • -XX:+UnlockExperimentalVMPotions 允许使用实验性参数
  • -XX:MaxGCpauseMillis=100 设置G1回收器每次年轻代回收的最长时间,如果无法满足此时间,JVM会自动跳转年轻代大小来满足此值
  • -XX:GCPauseIntervalMills 设置G1会火速停顿间隔时间
  • -XX:+HandlePromotionFailure 关闭新生代的收集担保
  • -XX:+ScavengeBeforeFullGC 在FullGC前先出发一次Minor GC
  • -XX:+UseGCOverheadLimit GC运行时间上限。如果超过就抛出OOM
  • -XX:OnOutOfMemoryError 发生OOM异常时触发的指令

GC追踪

  • -XX:+PrintGC 输出GC日志
  • -XX:+PrintGCDetails 输出GC的详细日志
  • -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
  • -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2017-09-04T21:53:59.234+0800)
  • -XX:+PrintGCApplicationConcurrentTime 输出每次垃圾会收取程序未中断的执行时间
  • -XX:+PrintGCApplicationStoppedTime 输出每次垃圾回收期间程序暂停的时间
  • -XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
  • -Xloggc:../logs/gc.log 日志文件的输出路径
  • -XX:+DisableExplicitGC 禁用显示GC,例如System.GC()
  • -Xincgc 使用增量GC让GC和线程交替运行,减少停顿
  • -XX:-PrintTenuringDistribution 打印Tenuring年龄

JIT编译

  • -XX:+CITime JIT编译的基本信息
  • -XX:CompileThreshold 运行时将字节码编译成本地代码提高效率
  • -Djava.compiler=None 禁止JIT编译器行为
  • -XX:CompileThreshold=10000 java代码执行10000次后会编译成NativeCode
  • -XX:InitialCodeCacheSize 初始代码缓存大小
  • -XX:ReservedCodeCacheSize 预留缓存代码大小
  • -XX:+UseCodeCacheFlushing 缓存空间不足时放弃部分本地缓存代码
  • -XX:+TieredCompilation 开启分层编译
  • -XX:InlineSmallCode= 当编译的代码小于指定的值时,内联编译的代码
  • -XX:MaxInlineSize=35 内联方法的最大字节数
  • -XX:FreqInlineSize= 内联频繁执行的方法的最大字节码大小

堆Dump

  • -XX:+HeapDumpOnOutOfMemoryError 程序OOM时进行快照
  • -XX:+HeapDumpPath 指定快照的保存地址

类加载

  • -XX:+TraceClassLoading 追踪类加载
  • -XX:+TraceClassUnLoading 追踪类卸载
  • -XX:+PrintClassHistogram 打开运行时实例信息,统计系统内类

类校验

  • -XX:-UseSplitVerifier 指定用旧的类校验器
  • -XX:-FailOverToOldVerifier 新校验器失败使用该设置用老校验器再次校验
  • -XX:-RelaxAccessControlCheck 放松对访问控制的检查

Solaris系统线程控制

  • -XX:+UseBoundThreads 绑定所有用户线程到内核线程,减少饥饿状态次数
  • -XX:+UseLWPSynchronization 使用内核线程替换线程同步
  • -XX:+UseVMInterruptibleIO 允许运行时中断线程
  • -XX:+MaxFDLimit 设置java进程可用文件描述符为操作系统允许的最大值
  • -XX:+UseAltSigs 防止与其他发送信号的应用程序冲突,允许使用候补信号替代
  • -XX:-UseISM 启用ISM
  • -XX:+UseMPSS 启用MPSS,不能与ISM同时使用
  • -XX:-ExtendedDTraceProbes 开启dtrace探针

内存大页

  • -XX:+UseLargePagess 使用大页,减少内存分页表项
  • -XX:LargePageSizeInBytes 设置大页的大小,大的内存分页可以提高CPU的内存寻址能力

压缩指针

  • -XX:+UseCompressedOops 压缩指针减少内存消耗

DEBUG

  • -XDebug 通知JVM在Debug模式下工作
  • -Xrunjdwp 通知JVM使用java debug wrie protocol模式运行调试环境

    该配置参数比较多,详细记一下

    transport 在调试程序和VM使用的进程直接通向

    de_socket 套接字传输

    de_shmem 内存共享传输(Windows系统)

    server=y/n VM是否需要用来作为调试服务器执行

    address 调试服务器端口号,客户端用来连接的端口号

    suspend=y/n 是否在调试客户端简历后启动vm

    本人在测试环境配置的一个可用配置:-Xrunjdwp:server=y,transport=dt_socket,addtess=9416,suspend=n

  • -Xnoagent 禁用默认sun.tools.debug调试器

JMX

  • -Dcom.sun.management.jmxremote 启动远程JMX
  • -Dcom.sun.management.jmxremote.authenticate true/false 启用鉴权
  • -Dcom.sun.management.jmxremote.port 1-65535 远程端口号
  • -Dcom.sun.management.jmxremote.local.only true/false 是否只能本地调试
  • -Dcom.sun.management.jmxremote.ssl true/false 是否支持SSL
  • -Dcom.sun.management.jmxremote.access.file 文件路径 鉴权的账户文件
  • -Dcom.sun.management.jmxremote.password.file 文件路径 鉴权的密码文件
  • -Djava.rmi.server.hostname ip/domain 链接IP

其他

  • -XX:+UseFastAccessorMethods 优化原始类型的getter方法性能
  • -XX:+UseBiasedLocking 开启偏向锁
  • -XX:+AllowUserSignalHandlers 允许应用使用信号处理器
  • -XX:-UseSpinning 开启多线程自旋锁优化
  • -XX:PreBlockSpin=10 多线程自旋锁优化的自旋次数
  • -XX:+UseTLAB 开启线程本地缓存区
  • -XX:+UseThreadPriorities 使用本地线程的优先级
  • -XX:+AggressiveOpts 启用当前版本新添加的调优功能
  • -XX:+UseStringCache 缓存常用的字符串
  • -XX:+UseCompressedStrings 字节数组能够以纯ASCII码来描述字符
  • -XX:+OptimizeStringConcat 提高字符串拼接的性能
  • -XX:ErrorFile= jvm错误日志
  • -XX:-TraceClassResolution 跟踪常量池的变化