java中对象的生命周期

java中对象的生命周期,java,oop,memory,object,heap-memory,Java,Oop,Memory,Object,Heap Memory,我引用了这个链接 我有一个疑问 class Sample { public static void main(String[] args) { Date dt=new Date(); System.out.println(""+dt); } } 首先,dt将在伊甸园空间如果GC发生,它将进入幸存者空间,如果GC发生在dt位于幸存者空间(如果我错了,请纠正我) 我的问题是: 如果显示日期并且程序完成运行过程,则 这些dt保留在堆空间中 如果

我引用了这个链接

我有一个疑问

class Sample
{
    public static void main(String[] args)
    {
        Date dt=new Date();
        System.out.println(""+dt);
    }
}
首先,
dt
将在伊甸园空间如果GC发生,它将进入幸存者空间,如果GC发生在
dt
位于幸存者空间(如果我错了,请纠正我)

我的问题是:

  • 如果显示日期并且程序完成运行过程,则 这些dt保留在堆空间中
  • 如果GC未在
    dt
    将保留的地方发生???
    (伊甸园空间、幸存者空间等)
  • 程序完成了运行过程,那么dt将没有引用,是吗 对吧
  • 非常感谢….

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

    (1) 当程序完成时,堆上将没有任何内容(dt将不存在)

    如果未发生GC,则dt将保留在何处??(伊甸园空间、幸存者空间等)

    (2) 关于“dt”你所能说的就是它将在伊甸园空间中创建,之后,如果它进入幸存者空间或终身世代,或者被垃圾收集,都是由GC管理的,你无法确切知道它在哪里

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

    (3) 是的,它不会有任何引用。事实上,当方法终止时,dt将有资格获得GC(现在如果GC发生在rt之外或需要时间,您不知道)


    需要说明的是,GC无法保证,在程序执行期间分配的任何内存在程序终止后都可能保持分配状态,在这种情况下,它将被操作系统回收。

    程序完成后,它不再存在于内存中,所以你的问题有点毫无意义…@vanza将对象从堆内存中移除,当程序完成时没有GC???当进程退出操作系统时,回收分配给它们的任何内存。他们离开了;他们已经不存在了。这就是操作系统的工作原理。@vanza所以Heap是一个临时存储对象的空间。程序退出后堆将释放???如果堆内存已满(运行程序时),GC将删除类(当前正在运行)的非引用对象???没有以前运行的类的对象???谢谢vivek。。。。请也澄清这些。。。。。因此,当程序完成运行进程时,堆中不会保留任何类的对象(在任何例外情况下)@Amith要清楚,GC没有保证,在程序执行期间分配的任何内存在程序终止后都可能保留分配,在这种情况下,它将被操作系统回收。@Amith这里有一篇关于etutorial Hopw的好文章,这将有助于澄清大多数疑问。