java堆個人理解
阿新 • • 發佈:2018-12-21
heap是oom發生的聚集地,它儲存著幾乎所有的物件例項,堆是由垃圾回收器自動回收管理,通常情況下堆佔有記憶體空間是最大的,無節制建立物件會耗盡記憶體,-Xms256 表示memory start 表示啟動時分配記憶體 - Xmx 1024表示 表示memory max 最大虛擬機器分配記憶體1024兆,伺服器執行時不斷地擴大收縮記憶體造成不必要的系統壓力通常在線上環境設定一樣大
堆分成兩塊一個新生代和老年代,物件產生之初放在新生代 ,步入暮年進入老年代但是也有異常就是老年代會接收新生代無法接受的超大物件
新生代又分為 Eden + 2個survivor 絕大部分物件存在Eden上當Eden裝滿的時候觸發YGC
新生代垃圾回將存活的物件放到survivor中的沒有使用的區域將當前空間完全清除如果YGC移送的物件大於survivor空間直接送入
老年代 每個物件都有一個計數器每次垃圾回收的時候存活物件count + 1 防止個別物件一直survivor區域跳來跳去 達到某個閾值也被清除掉 -Xx:MaxTeningThresHold 設定1一次垃圾回購直接老年代
建立一個物件首先放入Eden 區域如果放的下 放入 否則觸發 YGC
繼續判斷 Eden是否放的下放的下 放入 放不下 直接放入Old區域
判斷OLd區域是否放的下 放的下放入 放不下觸發Full Garbage Collection
繼續判斷放下不 放得下 放入 OLD區域 放不下 OOM
YGC 即是 Young Garbage Collection
首先判斷Survivor放的下不 放的下放入 放不下 放入老年代OLD
放置s0/s1 區域 若達到設定閾值也直接放到老年代等待下次垃圾回收清除