简单的说就是引用计数法,当一个对象没有被引用,也就是没有引用变量指向堆中的对象,这个对象就可以被回收GC.
回收的算法有:
复制法:把堆分为两块A,B。遍历A空间把活动的对象复制到B,然后一次性回收A区。
标记清除法:遍历所有的对象,把活跃的对象作标记,然后再次遍历的时候把所有的没有标记的对象回收。
JDK5中采用更先进的方法:分代
Java把堆分为3个区:年轻代,年老代,持久代。
大多对象都在年轻代区域创建。同时在年轻代的垃圾回收行为也最频繁
如果一个对象在年轻代历经数次GC不死,则把他移动到年老代。
年老代的GC不会很频繁。
一些核心的基础类将放在持久区。这个区不会发生GC。