JVM 通过 垃圾收集-GC 自动管理内存堆中对象内存的分配和回收。JVM 通常采用分代垃圾收集器,以便于整理内存碎片。分代垃圾收集器就是基于对象不同生命周期,将堆分成不同的内存区域,然后组合使用不同的垃圾收集算法,可简单认为分为两部分组成:
Young Generation:年轻代,由Eden和两个相等的Survivor空间组成,其中一个Survivor始终为空,用来复制Minor GC后在Eden和另一个Survivor存活的对象。
Old Generation:老年代,对象生命周期比较长。
内存回收
内存回收主要考虑两个问题:
如何判断对象可被回收,判断策略:
Tracing GC,跟踪收集,也叫可达性分析算法,其思想是从某些根对象引用(GC roots)出发总能找到一个到一组存活对象的引用链。
Reference counting,引用计数法,不能解决循环引用。
Escape analysis,逃