在Java運行時中,如果我的應用程序釋放內存,運行時是否會將內存釋放回操作系統?還是回到我的過程?Java VM - 釋放的內存是否返回到操作系統?
2
A
回答
4
這取決於JVM的實現,並沒有在規範中指定。
Sun JVM將堅持它作爲第一步。一旦某個(可配置的)已分配內存的百分比未被使用,它就會將其中的一部分返回給操作系統(行爲受到MinHeapFreeRatio
and MaxHeapFreeRatio
settings的影響)。
1
回到過程第一,但也可以回到操作系統到底。由GC分配的內存位於一個大的連續塊(堆)或一組塊中,GC「釋放」只是釋放堆中的分配,但不一定返回到操作系統。一旦GC壓縮,VM可能會將某些內存返回給操作系統。
GC希望保留一定的空間,以便快速處理將來的「新」內存請求。因此GC儘可能少地向操作系統請求大內存中的內存。
相關問題
- 1. 如何使JVM釋放內存回到操作系統
- 2. 在Perl中,如何釋放內存到操作系統?
- 3. 如何強制Ruby釋放內存到操作系統
- 4. 強制內存釋放到操作系統
- 5. BroadcastReceiver是否可以從Android操作系統中殺死以釋放內存?
- 6. GC運行後是否可以使用Sun JVM將內存釋放到系統?
- 7. 操作系統是否與CPU或內存相互作用
- 8. Android是否有「主機」操作系統?
- 9. SDL不釋放系統內存
- 10. COM類在.NET中返回byte [] - 是否釋放內存
- 11. Heroku內存限制是否包含運行操作系統所需的內存?
- 12. 爲什麼Ruby程序不會將堆內存返回到操作系統?
- 13. 對操作系統的內存保護
- 14. 返回Android操作系統名稱
- 15. 量角器 - 返回操作系統
- 16. 返回後C++內存釋放
- 17. CoreGraphics,內存釋放,返回值
- 18. Java中的操作系統
- 19. 是否存在與Android操作系統相當的IIS
- 20. 內存泄漏和操作系統
- 21. Linux內核操作系統寄存器
- 22. 內存管理由操作系統
- 23. 操作系統內存分配地址
- 24. 操作系統內存分配
- 25. Firefox操作系統:進程,內存
- 26. 64位操作系統內存分配
- 27. 操作系統主內存碎片
- 28. 開放源代碼雲操作系統/操作系統架構
- 29. 是否可以釋放UIWebView的內存?
- 30. Java JVM保持對操作系統的內存分配
我從來沒有見過Java VM對於將內存返回系統非常積極 - 可能是默認情況下的一件好事。 Java進程往往是長時間運行的,並且不斷擴大和縮小可能會使內存碎片化。對於大多數服務器端解決方案來說,釋放內存會導致不確定的行爲和糟糕的性能,但是如果他們將這個決定留給用戶(使用-Xmx/-Xms設置)將會很好。 – 2016-11-14 20:08:00