首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >new keyword和garbegcollection

new keyword和garbegcollection
EN

Stack Overflow用户
提问于 2015-04-20 18:01:11
回答 2查看 74关注 0票数 1

我有一个与new关键字相关的查询。

的区别是什么

代码语言:javascript
复制
new Demo().abc();

代码语言:javascript
复制
Demo demo=new Demo();
demo.abc();
demo=null;

  1. 如果我使用第一个,那么自动垃圾收集器删除内存?

我的问题是:

如何删除以下对象的内存:

代码语言:javascript
复制
new Demo().abc(); 
EN

回答 2

Stack Overflow用户

发布于 2015-04-20 18:07:01

案例-1 :

new Demo().abc();

在这里,我们没有维护对新创建的Demo实例的任何显式引用。但是在abc()内部,this引用将指向新创建的实例。因此,如果引用没有从abc()泄漏,那么只要方法返回,新创建的Demo实例就可以进行GC了(因为它变得无法从任何线程到达)。

如果存在这样的引用泄漏:

代码语言:javascript
复制
public void abc()
 {
  someOtherMethod(this); // starts another thread and does something else
  ...
 } 

在上面的情况下,即使当abc()返回时,创建的Demo实例仍然是可访问的,因此将不符合GC的条件。

案例-2 :

代码语言:javascript
复制
Demo demo=new Demo();
demo.abc();
demo=null;

在这里,一旦您将demo设置为null,并假设abc()不会将demo的引用泄漏给其他线程,那么一旦您将其设置为null,您的demo实例就将变得不可访问,因此,它将符合GC的条件。

票数 5
EN

Stack Overflow用户

发布于 2015-04-20 18:11:28

您不需要显式地执行任何操作来删除"new Demo().abc()",通常情况下,只要没有对这个Demo()对象的强引用,它就会被JVM垃圾回收。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29744765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档