<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-1  評論-9  文章-7  trackbacks-0
     

    網(wǎng)上很多關(guān)于面試筆試的一些題目,基本上都問到了同一個(gè)問題,finalize()的作用是什么?網(wǎng)上給的答案說的可能比較籠統(tǒng),今天又重溫了一遍Thinking in Java,又回顧了一下finalize()的意義和作用,特意寫出來,姑且作為備忘之用。

    估計(jì)大家對finalize()都有個(gè)基本的認(rèn)識,那就是作清理資源之用。比如在類的某個(gè)方法中打開了一個(gè)文件,那么你可能需要通過finalize()方法來釋放該資源。但是話說回來,java世界里,一切皆對象,而任何一個(gè)學(xué)java的人都知道,java對象是不需要手動去清理的,因?yàn)?/span>java有強(qiáng)大的垃圾回收器,有人可能會有疑問,那既然如此,為什么還需要在finalize()中手動釋放資源呢?當(dāng)然,面對這一問題,有很好的理由去解釋,因?yàn)橘Y源是有限的,而我們又知道垃圾回收器的線程優(yōu)先級非常低,在逼不得以的情況下,它才會工作,也就是說,只要內(nèi)存足夠,失效的對象就不會被清理,它所持有的資源也就得不到釋放,而資源又是有限的,比如數(shù)據(jù)庫連接,所以需要我們?nèi)ナ謩俞尫拧2贿^這一點(diǎn),在JDK7里面似乎是有所發(fā)展,聽說是會自動實(shí)現(xiàn)這一點(diǎn),也就是說,sun可能為我們做了這個(gè)工作,以后的程序中可能不需要手動釋放類似數(shù)據(jù)庫資源的代碼了。

    如果的確如此,那是不是意味著finalize()就沒用了呢?錯(cuò)。不過finalize()確實(shí)用到的時(shí)候不會很多,它主要用于一些本地方法調(diào)用過程中產(chǎn)生的資源清理。比如你通過Native method調(diào)用c語言的melloc方法分配了一些內(nèi)存空間,而這部分內(nèi)存是需要c語言的free()來進(jìn)行釋放的,如果不這樣,就會產(chǎn)生內(nèi)存泄漏,所以你需要在finalize()中用Native method方法調(diào)用free()將其釋放。

    不過話說回來,finalize()方法并不十分保險(xiǎn),因?yàn)?/span>finalize()只有在垃圾回收器工作的時(shí)候才會被調(diào)用,也就是說,通過它進(jìn)行資源釋放并不能確保馬上被釋放,甚至可能根本不會被釋放(因?yàn)槔厥掌骺赡懿粫ぷ鳎虼耍Y源釋放盡量另想辦法,別太相信finalize()和垃圾回收器了。

    posted on 2010-03-28 16:18 Dreava 閱讀(275) 評論(0)  編輯  收藏 所屬分類: Java基礎(chǔ)

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 中文字幕免费视频| 久久99精品视免费看| 亚洲综合另类小说色区色噜噜| 精品一区二区三区免费观看| 亚洲第一成年人网站| 国产乱子影视频上线免费观看| 成人A片产无码免费视频在线观看| 亚洲精品熟女国产| 亚洲国产精品日韩专区AV| 日韩在线不卡免费视频一区| 亚洲另类无码专区首页| 亚洲国产精品成人久久| 成年女人免费v片| 国产精品网站在线观看免费传媒 | 亚洲av成本人无码网站| 亚洲AV无码久久精品狠狠爱浪潮| 成年女人免费v片| 无码人妻精品中文字幕免费| 日韩精品亚洲专区在线影视| 在线电影你懂的亚洲| 亚洲AV无码之日韩精品| 四虎永久在线精品免费观看视频| 国产人成网在线播放VA免费| 亚洲va久久久久| 久久亚洲AV成人出白浆无码国产| 久久精品国产亚洲av影院 | 亚洲精品亚洲人成在线观看| 成年女人色毛片免费看| 午夜老司机永久免费看片| 免费人成大片在线观看播放电影| 亚洲理论片在线观看| 亚洲精品无码久久久久| 四虎亚洲国产成人久久精品| 国产成人A在线观看视频免费| 可以免费观看的毛片| 一级毛片人与动免费观看| 亚洲AⅤ男人的天堂在线观看| 亚洲av无码片在线观看| 亚洲韩国在线一卡二卡| 亚洲激情视频在线观看| 亚洲日韩精品一区二区三区无码 |