文章目录
1.概述
提到垃圾回收,顾名思义,就是把已经分配出去的,但却不再使用的内存回收回来。对于JVM来说,垃圾指的是在堆中死亡的对象所占据的内存空间。
那么自然而然的,我们就能够提出一个问题:怎么知道对象死没死?由这个问题让我们引出俩个比较有名的思路:
1.引用计数法
引用计数法是一个颇为古老的方式,原因它有致命的缺点。先不说缺点,咱们看一看它的思路。
它的做法是为每个对象添加一个引用计数器,用来统计指向该对象的引用个数。一旦某个对象的引用计数器为0,则说明该对象已经死亡,便可以被回收了
。
它的具体实现是这样子的:如果有一个引用,被赋值为某一对象,那么将该对象的引用计数器+1。如果一个指向某一对象的引用,被赋值为其他值,那么将该对象的引用计数器 -1
。
对于引用计数法来说,除了需要额外的空间来存储计数器,以及繁琐的更新计数器以外;引用计数法还有一个重大的漏洞: