java中对象的生命周期

时间:2012-07-31 03:35:41

标签: java oop memory object heap-memory

我引用了这个链接。 Heap memory

我有疑问

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

首先dt将位于伊甸园空间,如果GC发生,它将转到幸存者空间,如果GC在dt位于< strong>幸存者空间(如果我错了,请纠正我。)

我的问题是:

  1. 如果显示日期并且程序完成运行过程则会 这些dt仍留在堆空间??
  2. 如果未发生GC,dt仍然存在?(伊甸园空间,幸存者空间等)
  3. 程序完成运行过程,然后dt将没有参考我 右??
  4. 非常感谢.....

1 个答案:

答案 0 :(得分:1)

如果显示日期(程序完成运行过程),这些dt将保留在堆空间吗?

(1)程序完成后,堆上什么都没有(dt不存在)

如果没有发生GC,那么dt仍会存在? (伊甸园空间,幸存者空间等)

(2)所有关于“dt”的说法都是它将在eden空间中创建,之后如果它进入幸存者空间或Tenured Generation或者被垃圾收集全部由GC管理而你无法确切地知道它

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

(3)是的,它没有任何参考。事实上,当方法终止时,dt将有资格获得GC(现在如果gc发生rt离开或需要时间你不知道)

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