jvm---垃圾回收機制

1.如何判斷你是垃圾:

1)引用計數法

原理:每個對象都維護着一個引用計數器,沒被引用一次就加1,引用的地方置爲null就減去1,垃圾回收器掃描一個包含所有對象的列表,如果計數器爲0那就回收內存。

缺點:循環引用 不能回收廢棄的對象。

2)引用鏈

每個heap中的對象都必須要能找對對象的源頭,G.Root對象的引用鏈,如果該對象沒有到Root對象的引用鏈就說明沒有引用,垃圾回收。

 

finalize方法是每個對象在被垃圾回收前會執行一次的方法,判斷是否直接被回收取決於這個方法了。

 

類回收:滿足下面三個條件,對這個類進行回收(類的加載以及初始化可以看看)

1)該類的實例都回收

2)加載該類的classloader回收了

3)沒有使用java.lang.Class的地方用到這個類,即沒有地方通過反射來使用這個類的

通過配置jvm參數來設置類回收策略。如-Xnoclassgc

2.回收的策略

1)標記-清理(mark-swap) 標記回收的內存塊,並執行回收。造成了零散的內存區域,不連續。

2)複製算法 內存分爲兩塊,用一般回收的時候將不回收的複製到另一塊,把另一塊清空。

3)標記-整理

將有用的標記出來,並將他們移動到內存的一端,將存活區邊界以外的全部內存區域清空。

4)分代收集

 

3.垃圾回收器

G1垃圾回收器,

分享一篇講得較好的博文,當然還是推薦看官方文檔。

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-2.html#jvm      oracle官方jvm文檔

 

重點劃出有待明天整理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章