當啓動JVM時,OS會爲其分配內存,然後將該內存用作堆和堆棧。當我們在堆中創建一個對象時,JVM退出後對象會發生什麼?它是否安靜地呆在那裏,當JVM重新啓動時,OS重新分配內存?或者做其他事情發生?當JVM退出時,堆中的對象會發生什麼?
1
A
回答
2
大多數對象簡單地「蒸發」時,JVM退出 — 即,它們消失而不正常垃圾收集過程(包括最終確定)的發生。 (它是possible爲它們請求完成,但它是不明智的,因爲它們仍然可以被訪問和使用。)如果這些對象表示操作系統資源,如打開文件,這些資源將被釋放(關閉),但不保證所有未完成的數據被保存(當你自己close時發生)。更一般地說,當一個進程退出時,OS的所有正常堆棧和堆內存都會立即釋放(儘管它的一部分,就像用於存儲可讀的可執行文件和其他文件的那些內存有時可以重用(或者保留在其他需要這些文件的進程中)。例外情況包括用於進程間通信的shared memory,如果您不知道它,可能不會使用它。
1
JVM退出時(大部分時間)釋放堆中的對象。
我說的原因大部分時間是因爲釋放堆是操作系統的責任,而不是單獨的JVM。操作系統會努力清理併爲存儲分配提供內存分配。但這也取決於操作系統,我確信有操作系統在那裏他們不遵循這種主流方法。
相關問題
- 1. 當獲取它的線程退出時,Mutex會發生什麼?
- 2. 當你聲明一個對象時堆上發生了什麼?
- 3. 當FlatFileFooterCallback出錯時會發生什麼?
- 4. 當您產生activerecord對象時會發生什麼?
- 5. 當引用作用域結束時,引用指向指針對象(堆中的對象)時會發生什麼?
- 6. JVM不退出時發生TimeoutException異常
- 7. 當其中一個執行線程發生堆棧溢出異常時,JVM會退出嗎?
- 8. 當我在Hibernate中合併對象時會發生什麼?
- 9. 當我在C++中爲對象賦值時,會發生什麼?
- 10. 當我在java中創建對象時,jvm究竟發生了什麼?
- 11. 持有對同一對象的const引用的對象。退出時會發生什麼?
- 12. 當兩個對象相等時會發生什麼
- 13. 當我爲HttpClient對象設置代理時會發生什麼?
- 14. 當兩個類創建對象時會發生什麼?
- 15. WPF:綁定到對象的屬性;當對象改變時會發生什麼?
- 16. 「丟失」堆棧對象會發生什麼?
- 17. 當我們拋出一個對象/變量來捕捉時會發生什麼?
- 18. 當你拋出異常時,python對象會發生什麼變化
- 19. 當Docker容器的PID1退出時,其他進程會發生什麼?
- 20. 當父類對象被分配了子類對象時會發生什麼?
- 21. Jboss Cache:從緩存中逐出的對象會發生什麼?
- 22. 當Java中的集合超出容量時會發生什麼?
- 23. 彈出堆棧時內存會發生什麼變化?
- 24. 這個對象會發生什麼
- 25. 當運行時JVM內存不足以分配時會發生什麼?
- 26. 當localStorage已滿時會發生什麼?
- 27. 當redis重載時會發生什麼?
- 28. 當我ping 127.0.0.1時會發生什麼
- 29. 當AsyncTasks已滿時會發生什麼?
- 30. 當crontabs重疊時會發生什麼?
通常,當進程退出時,操作系統的虛擬內存管理器將回收進程分配的所有內存。在這種情況下,該進程恰好是JVM。沒有什麼比我會下注的其他流程。 –