java堆記憶體模型
阿新 • • 發佈:2019-01-06
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錯誤。