2016-07-28 14 views
1

考慮一個非常短的程序,我分配一點點內存。我被告知GC在程序分配大量內存並且分配達到極限的情況下運行。當GC不(必須)運行並且程序完成其執行時會發生什麼?

我不知道這個限制是什麼,但我認爲它必須足夠高,以便GC不會頻繁運行並減慢程序的執行速度。

我的問題是,當分配沒有達到GC準備運行的水平時,會發生什麼情況,在程序的生命週期中。它會導致內存泄漏嗎?

+0

順便說一句,這不是關於JDK – Andremoniy

+0

刪除該標籤 –

回答

1

如果你的問題是:如果你的JVM的GC運行結束之前發生了什麼記憶?

非常簡單:完整的內存「返回」到操作系統,並再次可用。

在簡單的話:

  1. 當您啓動JVM,XX MB的內存被賦予它
  2. 當你的JVM發現它運行的內存,在GC踢,擺脫垃圾(這樣JVM可以繼續運行)
  3. 當你的JVM退出,那些XX MB回到操作系統

對於第3步,那絕對是不着邊際的話/第二步發生了多長時間。

最後:「堆」是JVM如何在內部使用內存。操作系統只知道給JVM的絕對內存塊。

+0

即使內存是堆? –

+0

看我的更新.. – GhostCat

+0

非常感謝:) –

2

沒有具體發生。粗略地說:爲java進程分配的內存返回堆。 更具體地說:JVM使用本地內存爲java進程分配內存。 java進程終止後,這個內存對於操作系統中的其他進程是免費的。 我建議你閱讀更多關於此事的信息,例如在這裏:http://www.ibm.com/developerworks/library/j-nativememory-linux/

2

垃圾收集不運行,只有當沒有更多的內存,一個並行收集實際運行在另一個線程,當它決定了它有時間做收集如此,這不是唯一的策略。

Java garbage collector - When does it collect?

相關問題