2013-10-06 1 views
2

Я хотел бы понять, когда объект, созданный в строке-1, будет сборкой мусора ... Я предполагаю, что его на строке3, но я не вижу это как вариант в моей строке ответа 4 & 5 является частью ответасбор мусора - нулевая ссылка и ссылка на новый объект

class MyObject{ 
    public void myMethod(){ 
     System.out.println("Mymethod"); 
    } 
} 


public class Test { 

    public static void main(String[] args) { 
     MyObject m = new MyObject(); //line1 
     m.myMethod();//line2 
     m = null;//line3 
     m = new MyObject();//line4 
     m.myMethod();//line5 
    } 

} 
+0

Вы правы. Ответ должен быть строкой 3. –

+0

Примечание: имеет право на GC после строки 3, поэтому, возможно, строка 4 является ответом. Возможно, он никогда не будет очищен. –

+0

Ссылки могут быть готовы к сборке мусора, но нет способа сказать, когда именно это. –

ответ

4

Если установить ссылку на нуль, это не значит, что сборщик мусора будет удар и очистит память для него.

Только подходящие/отмеченные объекты - это мусор, собранный при сборе сборщика мусора JVM. Сборщик мусора проверяет все объекты, которые имеют право на сбор мусора. Объекты, на которые не ссылаются нигде.

JVM использует процесс, называемый маркировкой для маркировки объектов для сбора мусора. И когда GB ударит, он просто удалит отмеченные объекты.

1

Правильный ответ заключается в том, что нельзя сказать, когда объект, созданный в строке 1, будет собираться мусором. Все, что вы можете сказать определенно, это то, что он становится подходящим быть мусором, собранным по строке 3. Это может быть мусором, собранным после строки 3, но мы не можем сказать, что это будет be.