新关键字和garbegcollection

1 java garbage-collection memory-management new-operator

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

1.有什么区别

new Demo().abc();
Run Code Online (Sandbox Code Playgroud)

和

Demo demo=new Demo();
demo.abc();
demo=null;
Run Code Online (Sandbox Code Playgroud)

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

我的问题是:

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

new Demo().abc(); 
Run Code Online (Sandbox Code Playgroud)

The*_*ind 5

情况1 :

new Demo().abc();

在这里,我们没有保持对新创建的实例的任何显式引用Demo.但在内部abc(),this引用将指向新创建的实例.因此,如果引用没有泄漏abc(),则只要方法返回,新创建的Demo实例就会为GC做好准备(因为它无法从任何线程访问).

如果有这样的参考泄漏:

public void abc()
 {
  someOtherMethod(this); // starts another thread and does something else
  ...
 } 
Run Code Online (Sandbox Code Playgroud)

在上述情况下,即使abc()返回,Demo创建的实例仍然可以访问,因此不符合GC的条件.

案例-2:

Demo demo=new Demo();
demo.abc();
demo=null;
Run Code Online (Sandbox Code Playgroud)

一旦你设置demo为null并假设abc()没有泄漏demo对某个其他线程的引用,你的demo实例一旦设置就会变得无法访问null,因此它将符合GC的条件.