解决方案 »

  1.   

    你指的是垃圾收集的时候,jvm怎么处理交叉引用的吧?jvm的垃圾收集有多种机制,不是一言两语能够说清楚,建议看《深入浅出Java虚拟机》此书对垃圾收集有比较详细的描述。
      

  2.   

    java jvm的官方实现版本是HotSpot,他 的GC回收是通过可达性算法实现的,而不是通过引用计数器算法。所谓的可达性就是从若干个GC Roots 出发,能被直接或间接的引用到的,都称为“可达的”(reachable)。HotSpot定义Root是以一下几个指标为准:
    1.当前运行线程的虚拟机栈(其中的操作数栈)中所引用的对象指针。
    2.类静态的数据
    3.java native 的方法。如上就是jvm如何解决循环引用的问题。顺便提一句,为什么JAVA不建议使用finalize()(所谓的析构方法),就是因为如果此方法使用不当(大多数情况下确实如此)会影响GC的可达性判断,使得对象出现起死回生的现象而无法被回收。