GC
Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。
而当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就需要对那些“自动化”的技术实施必要的监控和调节,因此需要借助分析数据来对JVM及GC的参数进行调优。
详见Java 垃圾收集器与内存分配策略
历代Java版本所使用的默认GC Collecter
Java 7 - P GC
Java 8 - P GC
Java 9 - G1 GC
Java 10- G1 GC
Java 11- Z GC
jdk监控工具
jdk
自带有不少工具,下述为Java故障排除,分析,监视和管理的工具
-
(JVM诊断命令工具)jcmd
-
(符合JMX的图形工具,用于监视Java虚拟机)jconsole
-
(Java Mission Control(JMC)客户端包括监视和管理Java应用程序的工具)JMC
-
(在Java虚拟机中运行时提供有关基于Java技术的应用程序(Java应用程序)的详细信息)jvisualvm
jconsole
JConsole
是一个基于JMX的GUI工具,用于连接正在运行的JVM,用于监控和管理Java程序,较适合监控程序的堆情况。详见jconsole

jvisualvm
具体功能如下,详细介绍见jvisualvm
- 对应用程序进行故障排除,并监视和改进应用程序的性能。
- 生成和分析堆转储
- 跟踪内存泄漏
- 执行和监视垃圾收集
- 执行轻量级内存和CPU分析
Java监控工具及JVM常用参数
JVM常用参数
JVM参数 | 释义 |
---|---|
-Xmx | 最大堆大小 |
-Xms | 初始堆大小 |
-Xmn | 年轻代大小 |
-Xss | 线程的堆栈大小 |
-XX:SurvivorRatio=8 | Eden区与Survivor区的大小比值,设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 |
-XX:+UseG1GC | 使用 G1 (Garbage First) 垃圾收集器 |
-XX:MaxTenuringThreshold | 提升年老代的最大临界值(tenuring threshold). 默认值为 15[每次Young GC,增加1岁,到15岁如果仍存活,则进入年老代] |
注:1.推荐-Xms和-Xmx设置一致,避免堆内存不足时JVM调整堆的开销
参考资料:
1.Default garbage collector
2.JVM参数详解
3.Java平台,标准版HotSpot虚拟机垃圾收集调优指南
4.jconsole
5.jvisualvm
6.JDK Tools and Utilities