我有一个与new关键字相关的查询。
的区别是什么
new Demo().abc();和
Demo demo=new Demo();
demo.abc();
demo=null;
我的问题是:
如何删除以下对象的内存:
new Demo().abc(); 发布于 2015-04-20 18:07:01
案例-1 :
new Demo().abc();
在这里,我们没有维护对新创建的Demo实例的任何显式引用。但是在abc()内部,this引用将指向新创建的实例。因此,如果引用没有从abc()泄漏,那么只要方法返回,新创建的Demo实例就可以进行GC了(因为它变得无法从任何线程到达)。
如果存在这样的引用泄漏:
public void abc()
{
someOtherMethod(this); // starts another thread and does something else
...
} 在上面的情况下,即使当abc()返回时,创建的Demo实例仍然是可访问的,因此将不符合GC的条件。
案例-2 :
Demo demo=new Demo();
demo.abc();
demo=null;在这里,一旦您将demo设置为null,并假设abc()不会将demo的引用泄漏给其他线程,那么一旦您将其设置为null,您的demo实例就将变得不可访问,因此,它将符合GC的条件。
发布于 2015-04-20 18:11:28
您不需要显式地执行任何操作来删除"new Demo().abc()",通常情况下,只要没有对这个Demo()对象的强引用,它就会被JVM垃圾回收。
https://stackoverflow.com/questions/29744765
复制相似问题