Коллекции, синглтоны, сборка мусора - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть следующий код:

public void method1() {
    Emp e1 = new Emp();
    Emp e2 = new Emp():
    Emp e3 = new Emp();
    method2(e1, e2, e3);
}

public void method2(Emp... emps) {
    List<Emp> emps = new ArrayList<>();
    for(final Emp emp : emps) {
        emps.add(emp);
    }
    // do some task with list
}

Итак, когда возврат метода 2 будет выполнять сборку мусора?Или нам нужно явно удалить элементы.Хотелось бы понять с точки зрения утечки памяти.

Любые указатели высоко оценены.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Краткий ответ : Да, emps будет собирать мусор, и нет, вам не нужно явно удалять элементы в Java.

Более длинный ответ : Если вы новичок в Java и сборке мусора (возможно, пришли из C ++?), То ответы до сих пор могут пропускать очень простой ответ, который вы ищете. Как уже отмечалось, ваш размещенный код не вполне компилируется в Java, поэтому мы не можем дать идеальный ответ. Тем не менее, я предполагаю, что вы на самом деле просто спрашиваете, должны ли мы явно освобождать память в Java: нет, мы не делаем.

С Основы Java Сборка мусора :

В языке программирования, таком как C, выделение и освобождение памяти - это ручной процесс. В Java процесс освобождения памяти обрабатывается сборщиком мусора автоматически.

Сборка мусора - сложная тема, но вы можете по существу верить, что JVM определит ", какие объекты используются, а какие нет " в некоторый интервал, и удалит " неиспользованные объекты"на некотором интервале. Следовательно, вы, скорее всего, не будете открывать никаких «утечек памяти» в вашей программе, если позволите JVM увидеть, что объекты не используются - другими словами, не держитесь за объекты, когда они вам не нужны.

0 голосов
/ 18 сентября 2018

Нет определенного времени, когда garbage collection будет работать.Всякий раз, когда нет ссылки на объект, он получает право на garbage collection.

Когда метод вызывается в Java, он попадает внутрь фрейма стека.Когда метод извлекается из стека, все его члены умирают.Следовательно они становятся подходящими для gc.Объекты, созданные внутри него, становятся недоступными или анонимными после выполнения метода и, следовательно, становятся пригодными для сборки мусора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...