2015-07-27 3 views
0

Так что в последнее время у меня возник вопрос: как долго хранится объект, когда я создаю его новый экземпляр? В основном я спрашиваю, как он хранится.Как долго сохраняются новые экземпляры Java?

Пример:

public void initUser(Player player) { 
     User u = new User(ally, player.getUuid()); 
     u.setHealth(20); 
} 

(Пользователь, являющееся объектом)

Так как долго u хранятся? Является ли Java чистым после того, как я закончил с этим? (после вызова #setHealth)?

Спасибо.

+0

Этот объект является локальным для метода inituser ... как только он покидает метод ... Объект имеет право на gc ... – CoderNeji

+0

Да Мати, просто посмотрел на него. Это то, что я искал. – Erik

+0

Будет автоматически собираться мусор в какой-то момент после того, как он больше не используется. –

ответ

-2

Как только вы закончите работу с Object, Java выполняет gc самостоятельно.

+2

Thats not true true –

0

Существует специальная часть Java Runtime называется сборщик мусора заботится не разрушая все объекты, когда они больше не используются.

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

Чтобы сигнализировать JVM, что объект готов для сборки мусора, объект должен получить unrefrenced в любом из способов ниже:

  1. Явное person = null Снятие ссылки; // person является экземпляром Person

  2. Объект выходит за рамки Объект, созданный внутри метода, выходит за пределы области действия, как только метод возвращается к вызывающему методу. Итак, в нижнем случае один раз method() закончился, p неявно становится null.

    общественного недействительный метод() {

    Персона р = новое лицо(); }

После unrefrencing, виртуальная машина может вернуть эту память. Виртуальная машина может решить, когда мусор собирать неохраняемый объект. Но спецификация не гарантирует предсказуемого поведения. Это зависит от VM, чтобы решить, когда вернуть память из недопустимого объекта или, возможно, НЕ вернуть память вообще.

Если класс объявляет финализатор (т. Е. Метод public void finalize()), то сборщик мусора будет выполнять метод finalize() в экземпляре класса, прежде чем он освободит пространство памяти, занимаемое этим экземпляром.

Так ясно, точное время сбора мусора непредсказуемо.

Источник: http://geekrai.blogspot.com.br/2013/05/life-cycle-of-object-in-java.html

0

Объект, который вы создали для пользователя является локальным объектом. Таким образом, он будет активен в методе, как только программа выйдет из метода, этот объект будет иметь право на GC.

class Test{ 
User u1 = new User(); 
public void initUser(Player player) { 
    User u = new User(ally, player.getUuid()); 
    u.setHealth(20); 
} 
} 

В приведенном выше коде объект u1 жив в течение жизни класса. Если вам нужно, чтобы объект был GC, тогда сделайте u1 = null