Java 垃圾收集器如何释放那些没有任何引用名称而创建的新对象

Java 垃圾收集器如何释放那些没有任何引用名称而创建的新对象,java,garbage-collection,Java,Garbage Collection,我有一个班级反应 public class Response { public Response(String response,String platform,String url) { this.response =response; this.platform = platform; this.url = url; } ... } 从DAO将此对象保存在表中 { Response 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);
    ...
}

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

您所说的“引用名称”只是指向给定对象的另一个引用,在本例中,它是一个局部变量

一旦无法从任何垃圾收集根目录访问对象,就会对其进行垃圾收集


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

如果调用
save
后未使用
response
变量,则编译后这两个代码段是相同的。这也不会导致任何性能问题。这纯粹是关于t代码可读性。当不存在对对象的引用时,对象可能会被垃圾收集。那么,为什么在引用仍然存在时,它有一个名称会有所帮助呢?当对象有资格进行垃圾收集时,该名称与不可访问对象之间没有任何关系。名称对垃圾收集并不重要埃克托。
{
    sendgridResponseDAO.save(new Response(jsonObject.toString(), platform, url));
}