新关键字和garbegcollection

时间:2015-04-20 10:01:11

标签: java memory-management garbage-collection new-operator

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

1。有什么区别

new Demo().abc();

Demo demo=new Demo();
demo.abc();
demo=null;

2。 如果我使用第一个然后自动垃圾收集器删除内存?

我的问题是:

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

new Demo().abc(); 

2 个答案:

答案 0 :(得分:5)

案例-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的引用泄露给其他某个帖子,您demo将实例设置为null后,实例将变为无法访问,因此,将符合GC 的条件。

答案 1 :(得分:0)

您没有明确地执行任何操作来删除"new Demo().abc()",通常只要没有对此Demo()对象的强引用,它就会获得JVM收集的垃圾。