深入理解Java虚拟机 JVM高级特性与最佳实践 阅读笔记
垃圾收集算法
标记-清除算法 Mark-Sweep

复制算法 Copying

- Eden: 80%
- Survivor1: 10%
- Survivor2: 10%
标记-整理算法 Mark-Compact

HotSpot JVM 1.6 垃圾收集器

Serial 收集器

- 新生代
- 复制算法
- 单线程回收
- Stop The World
ParNew 收集器

- 新生代
- 复制算法
- 并行回收
- Stop The World
MinorGC收集新生代

FullGC收集老年代

Parallel Scavenge 收集器
- 新生代
- 打到一个可控的吞吐量, 吞吐量=用户代码时间/(用户代码时间 + 垃圾回收时间)
Serial Old 收集器

- 老生代
- 标记-整理算法
- 单线程回收
- Stop The World
Parallel Old 收集器

- 老生代
- 标记-整理算法
- 并行回收
- Stop The World
CMS 收集器 Concurrent Mark Sweep
CMS收集器有3中收集操作:
- MinorGC 新生代对象回收(Stop The World)
- Concurrent Cycle 并发收集老年代
- FullGC

- 老生代
- 最短回收停顿时间
- 标记-清理算法
- 四个阶段
- 初始标记 CMS initial mark
- 并发标记 CMS concurrent mark
- 重新标记 CMS remark
- 并发清除 CMS concurrent sweep
CMS回收新生代空间

CMS并发垃圾回收

G1收集器
G1主要包含4个操作
- 新生代垃圾收集
- 后台收集,并发周期
- 混合式垃圾收集
- FullGC
- 精确控制停顿
- 标记-整理算法
- Java堆分成多个大小固定的独立区域,跟踪每个区域垃圾堆积情况,形成一个优先队列,根据允许运行的时间优先回收垃圾最多的区域
G1新生代收集

G1并发垃圾收集

G1混合式收集

JVM监控和故障处理工具
显示虚拟机进程

收集虚拟机运行时数据

jinfo: Configuration Info for Java
虚拟机配置信息
jmap: Memory Map for Java
内存快照heapdump

$ jmap -heap 41899
$ jmap -histo 41899
$ jmap -histo:live 41899
$ jmap -dump:format=b,file=mars.bin 41899
jhat: JVM Heap Dump Browser
分析heapdump文件
$ jhat mars.bin
# 访问 http://127.0.0.1:7000/
jstack: Stack Trace for Java
显示虚拟机线程快照

JConsole: Java监视与管理控制台

VisualVM: 多合一故障处理工具
下载:https://visualvm.github.io/download.html
Written on December 6, 2018