2017-08-28 99 views
1

當啓動JVM時,OS會爲其分配內存,然後將該內存用作堆和堆棧。當我們在堆中創建一個對象時,JVM退出後對象會發生什麼?它是否安靜地呆在那裏,當JVM重新啓動時,OS重新分配內存?或者做其他事情發生?當JVM退出時,堆中的對象會發生什麼?

+2

通常,當進程退出時,操作系統的虛擬內存管理器將回收進程分配的所有內存。在這種情況下,該進程恰好是JVM。沒有什麼比我會下注的其他流程。 –

回答

2

大多數對象簡單地「蒸發」時,JVM退出  — ,它們消失而不正常垃圾收集過程(包括最終確定)的發生。 (它是possible爲它們請求完成,但它是不明智的,因爲它們仍然可以被訪問和使用。)如果這些對象表示操作系統資源,如打開文件,這些資源將被釋放(關閉),但不保證所有未完成的數據被保存(當你自己close時發生)。更一般地說,當一個進程退出時,OS的所有正常堆棧和堆內存都會立即釋放(儘管它的一部分,就像用於存儲可讀的可執行文件和其他文件的那些內存有時可以重用(或者保留在其他需要這些文件的進程中)。例外情況包括用於進程間通信的shared memory,如果您不知道它,可能不會使用它。

1

JVM退出時(大部分時間)釋放堆中的對象。

我說的原因大部分時間是因爲釋放堆是操作系統的責任,而不是單獨的JVM。操作系統會努力清理併爲存儲分配提供內存分配。但這也取決於操作系統,我確信有操作系統在那裏他們不遵循這種主流方法。

相關問題