如何确定哪些是垃圾

对于不再有用的对象,Java有垃圾自动回收机制(Garbage CollectionGC)。

哪些东西会被垃圾收集器(Garbage Collector)认定为不再有用的对象?

简单地说,任何无法被JVM中正在执行的线程通过引用变量名追寻到的对象,就是GC认定的垃圾。

引用计数法

Java中,引用和对象是有关联的。如果要操作对象则必须用引用进行。

因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。

简单说,即一个对象如果没有任何与之关联的引用,即他们的引用计数都不为0,则说明对象不太可能再被用到,那么这个对象就是可回收对象。

可达性分析

为了解决引用计数法的循环引用问题,Java使用了可达性分析的方法。

通过一系列的GC roots对象作为起点搜索。 如果在GC roots和一个对象之间没有可达路径,则称该对象是不可达的。

要注意的是,不可达对象不等价于可回收对象,
不可达对象变为可回收对象至少要经过两次标记过程。
两次标记后仍然是可回收对象,则将面临回收。

results matching ""

    No results matching ""