JVM 常见的启动参数 flags
//jit 编译器类型
- -client //32位 client, 启动早, 编译不耗时
- -server //32位 server, 启动晚, 编译耗时, 最终代码更优化,更快
- -d64 //64位
- -XX: TieredCompilation //必须使用 server 编译器, 先 client, 再 server 重新编译
- -XX:InitialCodeCacheSize=N //初始 code cache 值, 可以通过 jconsole 查看
- -XX:ReservedCodeCacheSize=N //最大 code cache 值
//编译开始的 threshold, 不是全局累加计数, 而是移动区间计数
- -XX:PrintComplilation //打印编译日志 可以通过 jstat 查看编译的统计信息或 jconsole
- -XX:CompileThreshold=N //是否启动编译的 threshold (方法调用计数器 循环回边计数器)
- -XX:OnStackReplacePercentage=N //OSR 的 threshold 值, 需要通过公式计算次数
- -XX:CICompilerCount=N //编译器的线程数
- -XX:Printflagsfinal 启动时打印所有标志 flags;
- -XX:+Inline //内联 默认是 true
- -XX:+DoEscapeAnalysis //逃逸分析 默认是 true
//GC refer: https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/collectors.html
- -XX:+UseSerialGC
- -XX:+UseParallelGC
- -XX:-UseParallelOldGC
- -XX:+UseConcMarkSweepGC
- -XX:+UseParNewGC
- -XX:+UseG1GC
//GC log refer: https://dzone.com/articles/enabling-and-analysing-the-garbage-collection-log
- -XX:+PrintGC
- -XX:+PrintGCDetails
- -XX:+PrintGCTimeStamps
- -XX:+PrintGCDateStamps
- -Xloggc:
- -XX:+PrintGCApplicationStoppedTime
- -XX:+PrintGCApplicationConcurrentTime
- -XX:+UseGCLogFileRotation
- -XX:NumberOfGCLogFiles=5
- -XX:GCLogFileSize=2000k
- -XX:ParallelGCThreads=N //并发启动的GC 回收线程数目
- -XX:+DisableExplicitGC
//heap related
- -Xms //heap start eg: -Xms3000m
- -Xmx //heap max eg: -Xmx:4000m
- -XX:NewRatio=N //新生代和老年代占比用比率, default 2. 新生代大小=总堆大小/(1+NewRatio)
- -Xns //Nursery Start eg: -Xns800m
- -XX:NewSize=N //新生代初始大小
- -XX:MaxNewSize=N //新生代最大值
- -XX:PermSize=N //永久带初始大小
- -XX:MaxPermSize=N //永久带最大值
- -XX:MetaspaceSize=N //java8 元空间初始大小
- -XX:MaxMetaSpaceSize=N //java8 元空间最大值
- -XX:+PrintAdaptiveSizePolicy //打印自适应策略相关信息
- -XX:+UseAdaptiveSizePolicy //使用自适应策略. 若xms,xmn,xns固定死,则不使用
//JFR
- -XX:UnlockCommercialFeatures
- -XX:+flightRecorder
官方文档: https://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html#PerformanceTuning
作为服务器运行的 JVM 最好设置下面这些参数:
-Xms<heap size>[g|m|k]
-Xmx<heap size>[g|m|k]
-XX:MaxMetaspaceSize=<metaspace size>[g|m|k]
-Xmn<young size>[g|m|k]
-Xloggc:"<path to log>"
-XX:+PrintGCDetails
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=10
-XX:GCLogFileSize=10M
-XX:+PrintGCDateStamps
-Dsun.net.inetaddr.ttl=<TTL in seconds>
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=<path to dump>`date`.hprof