淺談GC(最後更新時間:20170328)

說道GC,不得不提及一下內存模型,JVM主要管理兩種類型內存:堆和非堆,堆內存(Heap Memory)是在 Java 虛擬機啓動時創建,非堆內存(Non-heap Memory)是在JVM堆之外的內存。
簡單來說,堆是Java代碼可及的內存,留給開發人員使用的;非堆是JVM留給自己用的,包含方法區、JVM內部處理或優化所需的內存(如 JIT Compiler,Just-in-time Compiler,即時編譯後的代碼緩存)、每個類結構(如運行時常數池、字段和方法數據)以及方法和構造方法的代碼。
堆分爲年輕代,年老代,jdk7中還有永久代,jdk8中替換爲元空間(已經不存在對空間中);而GC發生在年輕代和年老代中,年輕代內存分爲Eden和S0和S1(內存比例8:1:1),當類被加載到堆中時,現在Eden區畫一片區域,然後開始加載;當內存不足時,就回觸發MinorGC,jvm會將可達的對象移至S0中,下一次MinorGC時,會將S0以及S1做交換,當S區中的標記對象的年齡達到16,會將S區中的對象移至老年代,當老年代空間不足,會觸發FullGC,FullGC比MinorGC的執行效率上要慢10倍以上;

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