记录本人曾经接触过的部分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 跟踪常量池的变化