如果你對jvm沒有基本的瞭解,那麼你可以先了解jvm之後再參閱本人會更便於理解
建議參考文章:《一張圖看懂JVM》
垃圾回收機制(GC)
首先要知道一些概念
年輕代、老年代、Eden區、Survivor區
年輕代:由Eden區、Survivor區組成
Eden區:new 出的新對象最初都存放在這裏
Survivor區:當Eden區滿之後,MinorGc機制會清理無引用狀態的對象,並將GCRoot對象複製到Survivor區其中一個區內
GCRoot:就是指當前仍在直接引用的對象,GCRoot對象所引用的全部對象會形成一個GCRoot鏈
new對象
Eden區滿之後會通過Minor GC機制,將全部的GCRoot(GCroot的代數+1)複製到From上,其餘未被引用對象會被清楚
當下次Eden區被佔滿時,MinorGC會再次被調用,對Eden區和Survivor區內未被引用對象清除,將GCroot的代數再加1
GCroot對象會一直在survivor區之間存在,當GCroot代數達到15代之後會移動至老年代。
而當老年代滿之後,會產生OOM。即內存沾滿,進程被動停止。