这是c#程序的设置:
内部主要课程:ObjA MyObjA = new ObjA();
内部ObjA:ObjB MyObjB = new ObjB();
所以main引用了ObjA,而ObjA引用了ObjB。
现在让我们说在主类中,我设置MyObjA = null;
垃圾收集器是否会出现并销毁ObjA?或者它会保存它,因为它引用了ObjB(尚未销毁)?
在后一种情况下,您可以看到这将是一次巨大的内存泄漏。但是作为旁注,如果前一种情况属实,那么在ObjB被销毁之前,GC需要通过1次还是2次?
另外,有人可以告诉我Android Java会发生什么吗?这些是我与atm合作的两种语言。
答案 0 :(得分:1)
MyObjA和MyObjB都将被销毁,因为它们无法从任何GC根源(诸如静态变量,堆栈变量或者像这样的递归指向的东西)中找不到。
我不确定你的意思是两次传球。 Java垃圾收集器的细节有点复杂,但如果对象无法访问,则应在单个GC循环中清除它们。