Как сборщик мусора освобождает эти новые объекты, созданные без какого-либо ссылочного имени - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть класс Response

public class Response
{
    public Response(String response,String platform,String url)
    {
        this.response =response;
        this.platform = platform;
        this.url = url;
    }
    ...
}

, сохраняющий этот объект в таблице, из DAO

{
    Response response = null;
    response = new Response(jsonObject.toString(), platform, url);
    sendgridResponseDAO.save(response);
    ...
}

или

{
    sendgridResponseDAO.save(new Response(jsonObject.toString(), platform, url));
}

Функционально оба одинаковы. Пожалуйста, помогите мне понять, во-вторых, как и когда сборщик мусора освобождает эти новые объекты? Будет ли второй способ создавать проблемы с памятью и замедлять работу системы? Какой из них эффективен?

1 Ответ

0 голосов
/ 06 ноября 2019

То, что вы называете «ссылочным именем», - это просто еще одна ссылка, которая указывает на данный объект, в данном случае это локальная переменная.

Как только объект недоступен из любого корень сборки мусора, это будет сбор мусора.

Пока работает метод save, объект Response будет доступен через аргумент этого метода в обоих случаях. (независимо от того, присвоили ли вы его сначала локальной переменной) или нет, есть вероятность, что метод save где-то сохранит ссылку на этот объект (так что более поздняя фиксация может фактически сохранить данные), поэтому в данном конкретном случае локальнаяпеременная вряд ли приведет к каким-либо различиям в поведении сборки мусора.

...