判断对象是否存活
1.引用计数法
2.可达性分析
垃圾回收算法
1.标记-清除算法(Mark-Sweep)
2.复制算法(Copying)
3.标记整理算法(Mark-Compact)
4.分代收集算法(Generational Collection)
HotSpot的gc算法实现
1.枚举根节点 解决gc root问题
2.安全点 解决何时进行gc的问题
3.安全区域 一段适合gc的区域
垃圾收集器
1.Serial收集器
单线程收集器
2.ParNew收集器
Serial收集器的多线程版本,可与cms搭配使用
3.Parallel Scavenge收集器
是一个新生代收集器,关注吞吐量的大小。
4.Serial Old收集器
是Serial收集器的老年代版本,单线程,标记-整理算法
5.Parallel Old收集器
Parallel收集器的老年代版本,多线程,标记-整理算法
6.CMS收集器(Concurrent Mark Sweep)
一种以获取最短回收停顿时间为目标的收集器
初始标记、并发标记、重新标记、并发清除
7.G1收集器(Garbage-First)
初始标记、并发标记、最终标记、筛选回收
内存回收和分配策略
1.对象优先在Eden区中分配,Eden区没有空间时,虚拟机发起一次minor gc
新生代gc(Minor gc) 新生代的垃圾回收动作,比较频繁,其中java对象朝生夕灭
老年代gc (Major gc/Full gc) 老年代的gc,速度一般比minor gc慢10倍以上
2.大对象直接进入老年代
大对象指需要连续内存空间的java对象(典型的是那种很长的字符串和数组)
3.长期存活的对象进入老年代
年龄相关问题,没经历一次minor gc年龄增加1
4.动态对象年龄判定
5.空间分配担保