1. 程式人生 > >垃圾分代回收機制

垃圾分代回收機制

機制 垃圾 分配 錯誤 完全 對象創建 spa 正常 rom

針對的是堆內存。
Java中的每種數據類型大小都是確定的,所以所有的內存是由Java自己進行分配,意味著內存的管理和回收也是由JVM自己進行—在Java中一旦產生內存問題導致程序員無法處理。理論上在正常情況下Java中的堆內存是足夠使用的 — 當堆內存使用的負荷量(一般情況下70%)超過一定限度的時候,會啟動垃圾回收器(Garbage Collector — GC)進行堆內存的回收釋放
Heap space
Young Generation
eden
survivor
from space
to space
Old Generation
擴展:eden:from:to = 8:1:1
對象剛創建的時候是先放入新生代中的伊甸園區;如果在伊甸園區經過一次回收依然存在,那麽將這個對象挪到幸存區,在幸存區中經過多次回收這個對象依然存在則挪到老生代。在回收的時候先回收新生代,如果新生代回收之後的內存足夠使用則不掃描老生代;如果不夠則掃描老生代。老生代的掃描頻率要低於新生代
發生在新生代的回收 — 初代回收 minor gc
發生在老生代的回收 — 完全回收 full gc
擴展:對象創建完成之後會先試圖放入新生代;如果新生代經過回收之後也放不開,則直接試圖將該對象放入老生代。老生代如果也放不開,則會出現錯誤 — OutOfMemoryError

垃圾分代回收機制