首页 > 解决方案 > 垃圾收集器如何释放那些在没有任何引用名称的情况下创建的新对象

问题描述

我有一堂课

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));
}

在功能上两者是相同的。请帮助我理解第二种方式,垃圾收集器如何以及何时释放这些新对象?第二种方式会产生内存问题并减慢系统速度吗?哪一个是高效的?

标签: javagarbage-collection

解决方案


您所说的“引用名称”只是指向给定对象的另一个引用,在这种情况下它是一个局部变量。

一旦对象无法从任何垃圾收集根访问,它将被垃圾收集。

只要save方法正在运行,在这两种情况下(无论您是否首先将其分配给局部变量),该Response对象都可以通过该方法的参数访问,并且该方法很可能会将对该对象的引用存储在某处(所以以后的提交实际上可以保存数据),因此在这种特定情况下,局部变量不太可能导致垃圾收集行为有任何差异。save


推荐阅读