我有一个困惑,gabage收集器如何决定一个对象不再使用,对象有一定的范围?
就好像我有代码
class A { in x; m1(){}}
class B {A a=new a(); a.x=10; }
所以我想知道当对象变得无法使用时
我的意思是在上面的代码中,如果类到达结束行,那么当它退出该类时,对象a可以进行垃圾收集,之后A类varibale将保持默认值将永久值为10
答案 0 :(得分:2)
只有声明(类型,成员,本地)具有范围。没别了。
答案 1 :(得分:2)
垃圾收集器通过查找和标记可从已知起始点(例如,每个线程的堆栈,所有静态变量......)到达的所有对象,然后吹走未被标记的对象来工作。完整的解释通常要复杂得多,但这就是它的本质。
答案 2 :(得分:1)
对象的范围与任何其他变量一样,并且由语言规则定义。
当没有其他对象引用它时,会对对象进行垃圾回收。
GC有或多或少的复杂算法来确定。其中一个是引用计数。
当局部变量超出范围时,它会丢失一个引用,如果引用coutn为0则会被垃圾收集。
垃圾收集不是确定性的,也就是说你无法确定何时进行垃圾收集。
将变量设置为null将基本上使变量可以收集垃圾。