GC - 垃圾回收机制
两件事情:
- 发现无用的对象
- 回收占用的空间
怎么发现?
引用计数法
- 每个对象都有计数
- 被引用时,计数+1
- 当计数为 0,对象被回收
- 缺点:对象互相引用,导致计数不为0
引用可达法
- 将所有引用关系作图
- 如果对象无法被到达,就进行回收
分代垃圾回收机制
对象分为三种状态:
- 年轻
- 年老
- 持久(不考虑)
JVM也将堆分为
- Eden
- Survivor 1
- Survivor 2
- Old
回收类型
- Minor GC:清理Eden和Survivor区域的无用对象,复制有用对象到Survivor1或者Survivor2(同一时间,1和2一个有对象,一个为空)
- Major GC:清理Old区域
- Full GC:清理Eden,Survivor和Old区域。影响性能。
回收过程:
- 当 Eden 满了,触发 Minor GC,使用survivor1
- Eden 满了,触发 Minor GC,将有用对象放到survivor2
- 被转移15次的对象,被放入Old
- 当Old达到一定比例,触发 Major GC
- Old满的时候,触发 Full GC