Java中finalize()
java這個(gè)finalize內(nèi)置方法,估計(jì)很多人不會(huì)去用途,如果理解這個(gè)方法的用法和含義就能做一些可能我們一起認(rèn)為不能做的事情。
在JAVA中有一種垃圾收集器的機(jī)制,當(dāng)它運(yùn)行時(shí)(通常在系統(tǒng)內(nèi)存低到一定限度時(shí)自動(dòng)運(yùn)行),會(huì)回收不再使用的對(duì)象所占用的內(nèi)存,所以,在JAVA程序中,我們通常只考慮創(chuàng)建對(duì)象,而從不關(guān)心對(duì)象的清除。Finalize()是JAVA為類提供的一種特殊方法。垃圾收集器的工作過(guò)程大致是這樣的:一旦垃圾收集器準(zhǔn)備好釋放無(wú)用對(duì)象占用的存儲(chǔ)空間,它首先調(diào)用那些對(duì)象的finalize()方法,然后才真正回收對(duì)象的內(nèi)存。通過(guò)使用finalize(),就可以在垃圾收集器運(yùn)行期間進(jìn)行一些特殊的工作。
你們也就是說(shuō),當(dāng)gc事件啟動(dòng)時(shí)候,他是調(diào)用對(duì)象的finalize(),來(lái)實(shí)現(xiàn)真正的回收,那么首先這些對(duì)象是沒(méi)有用的,最簡(jiǎn)單的使用,我可以在finalize()中添加
system.out.print 來(lái)跟蹤系統(tǒng)的回收了那些對(duì)象,可以深層次的了解系統(tǒng)對(duì)象的使用情況,比如那些對(duì)象回收最頻繁等等。
另外我在網(wǎng)上也看到有人這么用finalize(). 主要是統(tǒng)計(jì)在線人。這個(gè)網(wǎng)上也有很多,本人自己也做過(guò),但是在logout的時(shí)候,有三種情況
1.點(diǎn)擊程序的logout,這個(gè)我們可以監(jiān)聽(tīng)到。2.去別的網(wǎng)站 3.關(guān)閉瀏覽器。(當(dāng)然現(xiàn)在第二,第三有些網(wǎng)站也能通過(guò)script捕獲到,這里我們不談)
我們假定傳統(tǒng)的,session在服務(wù)端還是存在的,一般是經(jīng)過(guò)服務(wù)器端timeout,自動(dòng)將這個(gè)session的對(duì)象失效,那么我們?cè)谶@些對(duì)象調(diào)用finalize()做一些
統(tǒng)計(jì)就能知道那些人已經(jīng)離線。
具體這個(gè)例子
http://www.qqread.com/java/w712250600.html
這只是一個(gè)例子
我想說(shuō)的是,我們?nèi)绻斫饬薴inalize的含義和用途,就能在很多地方用好它,未嘗不是一種新方式。