要理解垃圾回收器是如何工作的,你就得先了解各种设计方案的原理。Reference counting是一种简单的,但却比较慢的方案。它的意思是,每个对象都要包含一个reference计数器,每次有reference连接到这个对象的时候,这个计数器就会做递增。每次有reference离开作用域,或者是设成null的时候这个计数器就会做递减。这样,管理reference计数器就成了程序运行期间的一项不大,但却无法摆脱的负担了。垃圾回收器扫描一遍所有的对象,找到reference计数器为零的对象,释放其内存。但是这种方案有个缺点,那就是如果一堆垃圾对象相互引用并且连成一个环的话,那它们的reference计数器就不会是零了。要让垃圾回收器找出这种自我引用的对象,需要花更多的力气。Reference计数通常被用于解释垃圾回收的技术,但是似乎没有哪种JVM采纳了这种设计。