2012-07-31 70 views
-1

我已经引用此链接。 Heap memoryjava中对象的生命周期

我有一个疑问

class Sample 
{ 
    public static void main(String[] args) 
    { 
     Date dt=new Date(); 
     System.out.println(""+dt); 
    } 
} 

首先dt将在伊甸园空间如果GC发生就会去幸存者空间,如果GC happend当dt幸存者空间(正确如果我错了)。

我的问题是:

  1. 如果显示的日期和程序完成正在运行的进程,然后将这些 DT留在堆空间?
  2. 如果GC没有发生,dt仍然存在?
    (伊甸园空间,幸存者空间等)
  3. 程序完成运行过程,然后dt将没有任何参考我是否 对吗?

非常感谢你.....

+0

程序完成后,它不再存在于内存中,所以你的问题有点没有意义... – vanza 2012-07-31 03:43:00

+0

@vanza将对象从当程序完成时没有GC时堆内存? – Amith 2012-07-31 03:47:03

+0

进程退出时,系统回收为其分配的任何内存。他们退出了;他们不再存在了。这就是操作系统的工作原理。 – vanza 2012-07-31 03:47:53

回答

1

如果显示的日期(程序完成正在运行的进程)将这些DT留在堆空间?

(1)当程序完成后会有什么在堆(DT将不存在)

如果GC没有发生DT意愿仍然在那里? (伊甸园空间,幸存者空间等)

(2)所有你可以说的“dt”是它将在伊甸园空间中创建,然后如果它发展到幸存者空间或Tenured Generation或获取垃圾收集所有由GC管理,你不能确切知道它在哪里

程序完成运行过程dt将没有参考我是吗?

(3)是的,它不会有任何参考。事实上,当方法终止时,dt将符合GC的条件(现在如果gc发生了错误或需要时间,您不知道)

要清楚,GC没有任何保证,程序执行期间分配的任何内存可能仍然在程序终止后分配,在这种情况下,它将被操作系统收回

+0

谢谢vivek ....请澄清这些.....所以没有任何类的对象在程序完成运行过程(在任何特殊情况下)时仍保留在堆中 – Amith 2012-07-31 04:42:30

+0

@Amith要清楚,GC没有任何保证,在程序执行期间分配的任何内存可能会在程序终止后保持分配状态,在这种情况下,操作系统将会回收它。 – Vivek 2012-07-31 05:20:36

+0

从哪里JVM需要内存它是从RAM? – Amith 2012-07-31 06:01:52