记录折腾的那点事
在折腾的道路上永不止步

JVM 常用配置项笔记 ( 重要 )

    (图来自于网络)

 

GC 日志

-verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintGCDateStamps

# GC 日志滚动删除保留
-XX:NumberOfGCLogFiles=16
-XX:GCLogFileSize=30m


# 输出停顿原因
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1

-XX:+PrintGCApplicationConcurrentTime 
-XX:+PrintGCApplicationStoppedTime

# 
-XX:+PerfDisableSharedMem

# 
-XX:AutoBoxCacheMax=2000

# 快速异常抛出
-XX:-OmitStackTraceInFastThrow

# 跟踪堆外内存占用
-XX:NativeMemoryTracking==[off|summary|detail]


# 关闭偏向锁
-XX:-UseBiasedLocking

-XX:+UseGCLogFileRotation
-XX:+NumberOfGCLogFiles=10
-XX:+GCLogFileSize=10m
-Xloggc:/opt/software/myproject/gc-`date+%Y%m%d.%H%M%S`.log

 

堆大小

-Xms2G
-Xmx2G
-Xmn512m
-XX:MetaspaceSize=512M
-XX:MaxMetaspaceSize=512M

 

垃圾收集器算法

-XX:+UseSerialGC:设置串行收集器
-XX:+UseParallelGC:设置并行收集器
-XX:+UseParalledlOldGC:设置并行年老代收集器
-XX:+UseConcMarkSweepGC:设置并发收集器,搭配 -XX:+ExplicitGCInvokesConcurrent 使用能够提高效率

 

GC 使用并发线程数

-XX:ParallelGCThreads=4
-XX:ConcGCThreads=2

 

算法密集型开启多层编译(JDK 8 中,默认是打开的)

-XX:+TieredCompilation

 

-XX:AutoBoxCacheMax=20000

 

自旋锁优化

# 开启自旋锁
-XX:+UseSpinning

# 自选次数,默认值为 10
-XX:PreBlockSpin

 

查看 JVM 内存占用情况

在环境中配置  -XX:NativeMemoryTracking==[off|summary|detail] 参数。然后,配合执行:

$ jcmd <pid> VM.native_memory summary


各种垃圾回收算法优缺点

1、Serial(新生代-串行-收集器)

  • 策略:标记-复制-清除;

  • 优点:简单高效,适合Client模式的桌面应用(Eclipse);

  • 缺点:多核环境下,无法充分利用资源;

 

2、parnew(新生代-并行-收集器)

  • 策略:标记-复制-清除;

  • 优点:多线程、独占式,多核环境下提高CPU利用率;

  • 缺点:单核环境下比Serial效率低;

 

3、Parallel Scanvenge(新生代-并行-收集器)

  • 策略:标记-复制-清除;

  • 优点:精准控制“吞吐量”、gc时间。吞吐量=执行用户代码时间/(执行用户代码时间+内存回收时间);

  • 配置参数(可通过参数精准调控):    

    
4、Serial Old(老年代-串行-收集器)

  • 策略:标记-清除-整理;

  • 优点:简单高效;

  • 缺点:多核环境下,无法充分利用资源;

 

5、Parall Old(老年代-并行-收集器)

  • 策略:标记-清除-整理;

  • 优点:多核环境下,提高CPU利用率;

  • 缺点:单核环境下,比Serial Old效率要低;

 

6、CMS(老年代-并发-收集器);

  • 策略:标记-清除;优点:“停顿时间”最短;

  • 缺点:内存碎片(有补偿策略);

  • 适用场景:互联网Web应用的Server端、涉及用户交互、响应速度快;

 

7、G1(新生代&老年代-并行&并发-服务端收集器)

  • 策略:G1将内存划分为Region,避免内存碎片;

  • 优点:Eden、Survivor、Tenured不再固定,内存使用率更高;可控的STW时间,根据预期的停顿时间,只回收部分Region;

  • 适应场景:多核CPU,JVM占用内存比较大的情况(>4GB);

 

赞(0)
未经允许不得转载:ghMa » JVM 常用配置项笔记 ( 重要 )
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址