GC是怎么判断一个变量已经变成垃圾?GC是怎么判断这个变量不会再被用到?

解决方案 »

  1.   

    CLR去判断。CLR会从一个根对象遍历所有被使用的对象,并且标记出来。其余的“孤岛”,就是垃圾数据了。当然CLR的实现更加复杂,为了性能考虑,CLR会用代这个概念来标记不同的待回收对象。你感兴趣的话可以看 CLR via C#。
      

  2.   

    就是说,涉及一个很深的算法理论?好的,我先去了解一下CLR via C#
      

  3.   

    ”代“,generation,新new的对象是0代。每一次GC的回收,如果这个对象还有对它的引用,则上升1代。如果你学过COM,那么对GC的运行机制理解会有一定的帮助。
      

  4.   

    垃圾回收主要是两种算法,一个是引用计数。每次有变量引用就加1,当引用为0的时候就是垃圾(COM模型用的就是这个)。另一个就是我上面说的。
      

  5.   

    我对COM不是很熟悉,所以去补习补习先