目錄
引用計數算法
什么是引用
可達性分析算法(用的最多的)
引用計數算法
定義:在對象中添加一個引用計數器,每當有一個地方引用它時,計數器值就加一;當引用失效時,計數器值就減一;任何時刻計數器為零的對象就是不可能再被使用的。
但是不能解決循環引用的問題,A引用B,B引用A,這個對象的引用計數就不可能為0.這兩個對象不會被別的任何對象引用,卻不會被回收
什么是引用
?對象引用的四個等級:
為什么說要有這個設置:為了滿足當內存空間還足夠時,能保留在內存之中,如果內存空間在進行垃圾收集后仍然非常緊張,那就可以拋棄這些對象。
- 強引用:new Object(),只有當判斷對象已經死的時候,才回收
- 軟引用:在系統要發生oom,會回收所有的軟引用對象,如果回收完,還是放不上這個對象,才溢出。,每次垃圾回收的時候,如果對象還沒死,就不回收,但是在oom之前,不管有沒有死,都會被回收。系統要發生oom,會回收所有的軟引用對象,如果回收完,還是放不上這個對象,才溢出。
- 弱引用:在每次垃圾回收的時候,不管有沒有引用,都會被回收。
- 虛引用:相當于什么時候回收都沒問題,也無法通過虛引用來取得一個對象實例。為一個對象設置虛引用關聯的唯一目的只是為了能在這個對象被收集器回收時收到一個系統通知
可達性分析算法(用的最多的)
當這個對象,與GCROOT對象沒有關聯的時候,就認為這個對象已經死亡了。GCROOT包括四類:兩個棧兩個方法區。(比如User對象在棧中有關聯,或者說這個對象在方法區中有static用著他)