繁体   English   中英

GC规则:如何查找是否有资格进行垃圾回收的Java对象

[英]GC Rules : how to findout a java object is eligible for garbage collection or not

任何人都向我指出一组定义好的规则,以找出是否有资格进行Java对象垃圾回收,并提供一个简单的示例。

一旦无法从任何线程访问对象,就可以使用GC。

如果满足以下条件之一,则可以从另一个对象A到达对象O:

  • A引用了O,或者
  • 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实例,那么FooBarBaz的实例都是可以访问的,并且不符合使用GC的条件。 (该线程具有对Foo实例的引用,该实例具有对Bar实例的引用,而该Bar实例具有对Baz实例的引用)。

如果然后在Foo实例中将x设置为null (或另一个对象),则BarBaz实例将不再可访问。 (该线程仍然具有对Foo实例的引用,而Bar实例具有对Baz实例的引用,但是Foo实例不再拥有对该Bar实例的引用)。 因此, BarBaz实例都可以使用GC。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM