JVM垃圾回收算法
1.堆的分代和区域 (年轻代)Young Generation(eden、s0、s1 space) Minor GC (老年代)Old Generation ( Tenured space ) Major GC|| Full GC (永久代)Permanent Generation ( Permanent space )【 方法区(method area) 】 Major GC 本地化的String从JDK 7开始就被移除了永久代(Permanent Generation ) JDK 8.HotSpot JVM开始使用本地化的内存存放类的元数据,这个空间叫做元空间(Metaspace) 2.判断对象是否存活(哪些是垃圾对象) 1.引用计数 (ReferenceCounting) :对象有引用计数属性,增加一个引用计数加1,减少一个引用计数减1,计数为0时可回收。 (无法解决对象相互循环引用的问题) 2. 根搜索 (GC Roots Tracing) : GCRoot对象作为起始点(根)。如果从根到某个对象是可达的,则该对象称为“可达对象”(存活对象,不可回收对象)。否则就是不可达对象,可以被回收。 下图中,对象Object6、Object7、Object8虽然互相引用,但他们的GC Roots是不可到达的,所以它们将会被判定为是可回收的对象 3.垃圾收集算法 1. 标记-清除