java - 垃圾收集器如何释放那些在没有任何引用名称的情况下创建的新对象
问题描述
我有一堂课
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));
}
在功能上两者是相同的。请帮助我理解第二种方式,垃圾收集器如何以及何时释放这些新对象?第二种方式会产生内存问题并减慢系统速度吗?哪一个是高效的?
解决方案
您所说的“引用名称”只是指向给定对象的另一个引用,在这种情况下它是一个局部变量。
一旦对象无法从任何垃圾收集根访问,它将被垃圾收集。
只要save
方法正在运行,在这两种情况下(无论您是否首先将其分配给局部变量),该Response
对象都可以通过该方法的参数访问,并且该方法很可能会将对该对象的引用存储在某处(所以以后的提交实际上可以保存数据),因此在这种特定情况下,局部变量不太可能导致垃圾收集行为有任何差异。save
推荐阅读
- reporting-services - 在 Excel 中导出 SSRS 报告时,连续的文本框隐藏/跳过一行
- spring - Spring REST 国际化正在返回 500 http 状态
- r - 根据条件在每行中第一次出现的位置
- ios - iOS:如何改变视图调整大小动画的方向:
- angularjs - 如何使用 VSCode 工具调试 jasmine 业力测试
- javascript - 一旦用户使用通过电子邮件发送的电子邮件验证链接进行验证,如何自动登录用户
- java - 使用 Elastic BeansTalk CLI 部署 Spring Boot 应用程序
- selenium - ChromeDriver 和带有 pageLoadStrategy 的 Chrome 的非确定性行为 none
- google-maps - 谷歌地图按时间出发
- java - kafka java进程消耗太多内存