垃圾收集是java與c/c++的最大不同。有了jvm的自動(dòng)垃圾收集機(jī)制,就可以讓程序員專注于程序邏輯開(kāi)發(fā),
而不是花費(fèi)大量的時(shí)間是考慮變量應(yīng)該在什么時(shí)候去釋放。
下面就來(lái)簡(jiǎn)單說(shuō)一下java的垃圾收集相關(guān)的東西
首先要明白的一個(gè)問(wèn)題是,jvm是如何判斷一個(gè)對(duì)象已經(jīng)變成了”垃圾“的呢?
兩個(gè)方法:
1)引用記數(shù)法:
為每個(gè)對(duì)象保存一個(gè)引用的數(shù)量,每增加一個(gè)引用這個(gè)值就加1,每減少一個(gè)引用就減1.如果這個(gè)記數(shù)變?yōu)?/p>
0了,就說(shuō)明這個(gè)對(duì)象已經(jīng)不再被使用了。那么jvm就認(rèn)為這個(gè)對(duì)象是可以回收的了。
但是這個(gè)方法有一個(gè)缺點(diǎn),就是無(wú)法解決循環(huán)引用的問(wèn)題。A引用B,B也引用A,如果A,B兩個(gè)對(duì)象都不再
被使用了,那么這兩個(gè)對(duì)象其實(shí)都是可以被回收的,但是他們的引用記數(shù)不為0.所以用這個(gè)辦法就沒(méi)有辦法回收了。