[英]GC Rules : how to findout a java object is eligible for garbage collection or not
任何人都向我指出一组定义好的规则,以找出是否有资格进行Java对象垃圾回收,并提供一个简单的示例。
一旦无法从任何线程访问对象,就可以使用GC。
如果满足以下条件之一,则可以从另一个对象A到达对象O:
因此,如果您有: class Foo { Bar x = new Bar(); }
class Foo { Bar x = new Bar(); }
和class Bar { Bar y = new Baz(); }
class Bar { Bar y = new Baz(); }
,并且您的线程中有一个Foo
实例,那么Foo
, Bar
和Baz
的实例都是可以访问的,并且不符合使用GC的条件。 (该线程具有对Foo
实例的引用,该实例具有对Bar
实例的引用,而该Bar
实例具有对Baz
实例的引用)。
如果然后在Foo
实例中将x
设置为null
(或另一个对象),则Bar
或Baz
实例将不再可访问。 (该线程仍然具有对Foo
实例的引用,而Bar
实例具有对Baz
实例的引用,但是Foo
实例不再拥有对该Bar
实例的引用)。 因此, Bar
和Baz
实例都可以使用GC。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.