2017-08-28 72 views
1

当启动JVM时,OS会为其分配内存,然后将该内存用作堆和堆栈。当我们在堆中创建一个对象时,JVM退出后对象会发生什么?它是否安静地呆在那里,当JVM重新启动时,OS重新分配内存?或者做其他事情发生?当JVM退出时,堆中的对象会发生什么?

+2

通常,当进程退出时,操作系统的虚拟内存管理器将回收进程分配的所有内存。在这种情况下,该进程恰好是JVM。没有什么比我会下注的其他流程。 –

回答

2

大多数对象简单地“蒸发”时,JVM退出  — ,它们消失而不正常垃圾收集过程(包括最终确定)的发生。 (它是possible为它们请求完成,但它是不明智的,因为它们仍然可以被访问和使用。)如果这些对象表示操作系统资源,如打开文件,这些资源将被释放(关闭),但不保证所有未完成的数据被保存(当你自己close时发生)。更一般地说,当一个进程退出时,OS的所有正常堆栈和堆内存都会立即释放(尽管它的一部分,就像用于存储可读的可执行文件和其他文件的那些内存有时可以重用(或者保留在其他需要这些文件的进程中)。例外情况包括用于进程间通信的shared memory,如果您不知道它,可能不会使用它。

1

JVM退出时(大部分时间)释放堆中的对象。

我说的原因大部分时间是因为释放堆是操作系统的责任,而不是单独的JVM。操作系统会努力清理并为存储分配提供内存分配。但这也取决于操作系统,我确信有操作系统在那里他们不遵循这种主流方法。

相关问题