1.JVM体系结构概述
2.GC算法
分类:
- 引用计数法:每个对象维护一个引用计数器记录其被引用数,当被引用数为0时即可回收
- 跟踪法(可达性分析算法):从GC Roots出发向下搜索,不可达的对象即可回收
GC Roots对象:
- 虚拟机栈(栈帧中的本地变量表)中引用的对象
- 本地方法栈中JNI(即native方法)引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
在可达性分析算法中不可达的对象,也并非就判定为“死亡”了;判定一个对象最终是否死亡,至少经历两次标记过程:
- 不可达的对象会被
第一次标记
; - 被第一次标记的对象进行 判断是否有必要执行finalize(),若对象覆盖了finalize()方法 且 finalize() 没有执行过,若都满足则执行finalize();
- 在finalize()中,若对象重新和引用链上的任一对象建立关联,则不会被
第二次标记
,它则不会被回收。
1.复制
2.标记清除
3.标记压缩
4.标记清除压缩
- 原理:
- Mark-Sweep和Mark-Compact结合
- 和Mark-Sweep一致,当进行多次GC后才Compact
- 优点:
减少移动对象的成本
3.Hotspot内存管理
4.Hotspot垃圾回收器
1.新生代垃圾回收器
1.Serial Copying
2.ParNew
3.Parallel Scavenge(吞吐量优先)
2.旧生代垃圾回收器
1.Serial MSC(Serial Old)
2.Parallel Compacting(Parallel Old)
3.CMS(并发低停顿)
5.调优
1.堆大小调优
2.新生代调优
1.大小
2.晋升
3.旧生代调优
6.监控工具