GC Tuning
在前面我们学习了GC相关知识,学习了基本的垃圾收集器使用,下面来简单对JVM调优入门,了解相关概念,如果想要深入理解,必须要进行实际的生产环境的磨练才可以掌握
路漫漫其修远兮!
一、常见垃圾回收器组合参数设定:(1.8)
-
-XX:+UseSerialGC = Serial New (DefNew) + Serial Old
小型程序才会用这种单线程的Serial,默认情况下不会是这种选项,HotSpot会根据计算及配置和JDK版本自动选择收集器
JDK1.8及以前:PS + PO;JDK1.9:G1
-
-XX:+UseConc(urrent)MarkSweepGC = ParNew + CMS + Serial Old
使用PN + CMS + Serial Old;现在很少使用CMS了,因为G1完虐CMS,直接使用G1即可
-
-XX:+UseParallelGC = Parallel Scavenge + Parallel Old (1.8默认) 【PS + SerialOld】
-
-XX:+UseParallelOldGC = Parallel Scavenge + Parallel Old
-
-XX:+UseG1GC = G1
-
Linux中没找到默认GC的查看方法,而windows中会打印UseParallelGC
- java +XX:+PrintCommandLineFlags -version
- 通过GC的日志来分辨
-
Linux下1.8版本默认的垃圾回收器到底是什么?
- 1.8.0_181 默认(看不出来)Copy MarkCompact
- 1.8.0_222 默认 PS + PO
二、了解JVM常用命令行参数
-
JVM的命令行参数参考:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html
-
HotSpot参数分类
标准: - 开头,所有的HotSpot都支持
非标准:-X 开头,特定版本HotSpot支持特定命令
不稳定:-XX 开头,下个版本可能取消
java -version
java -X
试验用demo程序:
import java.util.List; import java.util.LinkedList; public class HelloGC { public static void main(String[] args) { System.out.println("HelloGC!"); List list = new LinkedList(); for(;;) { byte[] b = new byte[1024*1024]; list.add(b); }