JVM內存結構系列:HotSpot內存結構最清晰

SUN的jvm內存池被劃分爲以下幾個部分:
Eden Space (heap)
內存最初從這個線程池分配給大部分對象。
Survivor Space (heap)
用於保存在eden space內存池中經過垃圾回收後沒有被回收的對象。
Tenured Generation (heap)
用於保持已經在survivor space內存池中存在了一段時間的對象。
Permanent Generation (non-heap)
保存虛擬機自己的靜態(reflective)數據,例如類(class)和方法(method)對象。Java虛擬機共享這些類數據。這個區域被分割爲只讀的和只寫的。
Code Cache (non-heap)
HotSpot Java虛擬機包括一個用於編譯和保存本地代碼(native code)的內存,叫做“代碼緩存區”(code cache)。
jvm的內存回收過程是這樣的:
對象在Eden Space創建,當Eden Space滿了的時候,gc就把所有在Eden Space中的對象掃描一次,把所有有效的對象複製到第一個Survivor Space,同時把無效的對象所佔用的空間釋放。當Eden Space再次變滿了的時候,就啓動移動程序把Eden Space中有效的對象複製到第二個Survivor Space,同時,也將第一個Survivor Space中的有效對象複製到第二個Survivor Space。如果填充到第二個Survivor Space中的有效對象被第一個Survivor Space或Eden Space中的對象引用,那麼這些對象就是長期存在的,此時這些對象將被複制到Permanent Generation。

若垃圾收集器依據這種小幅度的調整收集不能騰出足夠的空間,就會運行Full GC,此時jvm gc停止所有在堆中運行的線程並執行清除動作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章