版權聲明:本文為博主原創(chuàng)文章,轉載請注明出處,歡迎交流學習!
在堆內(nèi)存中存放著Java程序中幾乎所有的對象實例,堆內(nèi)存的容量是有限的,Java虛擬機會對堆內(nèi)存進行管理,回收已經(jīng)“死去”的對象(即不可能再被任何途徑使用的對象),釋放內(nèi)存。垃圾收集器在對堆內(nèi)存進行回收前,首先要做的第一件事就是確定這些對象中哪些還存活著,哪些已經(jīng)死去。Java虛擬機是如何判斷對象是否可以被回收的呢?
引用計數(shù)算法
引用計數(shù)算法的原理是這樣的:給對象添加一個引用計數(shù)器,每當有一個地方引用它時,計數(shù)器值就加1;當引用失效時,計數(shù)器值就減1;在任何時刻計數(shù)器的值為0的對象就是不可能再被使用的,也就是可被回收的對象。
引用計數(shù)算法的效率很高,但是主流的JVM并沒有選用這種算法來判定可回收對象,因為它有一個致命的缺陷,那就是它無法解決對象之間相互循環(huán)引用的的問題,對于循環(huán)引用的對象它無法進行回收。
假設有這樣一段代碼:
<