1. 程式人生 > >java堆記憶體模型

java堆記憶體模型

 

1. java堆記憶體劃分

分析:

   1.  這是jdk1.8以前的堆記憶體劃分。

   2.   新生代主要有Eden區域,存活區1,存活區2.(主要是剛剛建立的物件)

   3.  老年代(經過jvm垃圾回收之後,物件依然存活)

   4.  永久代(jvm垃圾回收機制不可能進行回收的),jdk1.8以後改為元區域,這個區域的記憶體時使用電腦的直接記憶體

   5.  在每一個區域之間都有一個伸縮區。

2. jvm的垃圾回收過程:

分析:

1. jvm垃圾回收主要可以通過自動回收和手動回收

2. 預設情況下使用jvm自動回收

3. 當建立物件時,會去檢查Eden區空間是否有空餘,如果有空餘則建立成功

4. 如果Eden區空間沒有多餘,則進行MinorGc,如果MinorGc後,會去檢查Eden是否有空餘,有多餘空間,物件建立成功。

5. 如果Eden沒有空餘,會去檢查存活區是否有多餘空間,如果有多餘空間,會把Eden區部分活躍物件儲存到存活區,從而申請物件成功。

6. 如果存活區沒有多餘空間,會看老年代是否有空間,如果老年代有存活物件,會把存活區部分活躍物件儲存到老年代裡面,

從而申請物件成功。

7.如果老年代沒有空間,則會觸發FullGc,如果FullGc失敗,那麼會丟擲OutOfMemory錯誤。