在Java中,什么时候对象变得不可达?

| 在Java中,什么是不可达对象?什么时候对象变得不可达?在研究垃圾收集时,我无法理解这个概念。 任何人都可以通过示例给出任何想法吗?     
已邀请:
当不再有引用它的引用变量时,或者当它在孤岛中孤立时。 孤岛是具有指向它的参考变量的对象,但是该对象没有指向它的参考变量。
class A { int i = 5; }
class B { A a = new A(); }
class C {
   B b;
   public static void main(String args[]) {
      C c = new C();
      c.b = new B();
      // instance of A, B, and C created
      c.b = null;
      // instance of B and A eligible to be garbage collected.
   }
编辑:只是要指出,即使A的实例具有引用,它现在在一个岛上,因为B的实例没有对其的引用。 A实例可以进行垃圾回收。     
当没有更多对象引用或对象本身来自不可修复对象时,该对象将不可修复。
Integer i = new Integer(4);
// the new Integer object is reachable  via the reference in \'i\' 
i = null;
// the Integer object is no longer reachable. 
    
在对象图中,如果一个对象没有链接到该对象,则引用将变得不可访问。然后,垃圾收集器将扫描这些悬空的孤立对象,并刷出以重新获得分配的内存。 java.lang.ref。{Phantom,Soft,Weak}参考使无法访问的对象入队。  如果运行终结器,则GC已知道其不可达。 阅读有关定稿的信息-http://java.sun.com/developer/technicalArticles/javase/finalization/ 在只有强引用的语言中,堆对象可以是可访问的,也可以是不可访问的。 程序。可达对象的集合由程序中的类变量和方法变量集确定 指向堆对象。该集合通常称为程序的根集合。变量指向的对象 在程序的根集中是可以访问的。此外,对象可能是间接可达的。也就是说,一个对象是 如果还有另一个可到达的对象指向它,则可达。这样的引用链来自程序的根集合 到堆对象的过程称为可达性路径。一个对象可能具有多个可达性路径,并且具有 根本没有可达性路径。如果对象没有可达性路径,则将其视为垃圾,可以立即 由垃圾收集器收集。 当不再存在对对象的强引用时,该对象将进入不可访问状态。当对象不可访问时,它是收集的候选对象。请注意以下措辞:仅仅因为对象是收集对象而已,并不意味着将立即收集该对象。 JVM可以自由地延迟收集,直到立即需要该对象消耗的内存为止。 重要的是要注意,不仅任何强引用都会在内存中保存对象。这些必须是从垃圾回收根链接的引用。 GC根是一类特殊的变量,包括 (任何线程的)堆栈上的临时变量 静态变量(来自任何类) JNI本机代码的特殊参考 如果您想http://java.sun.com/docs/books/performance/1st_edition/html/JPAppGC.fm.html可以了解更多     
无法访问的对象,是没有对它的“可访问的”引用的对象。 换句话说,没有引用它。     

要回复问题请先登录注册