<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
     

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

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

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

    不過話說回來,finalize()方法并不十分保險,因為finalize()只有在垃圾回收器工作的時候才會被調用,也就是說,通過它進行資源釋放并不能確保馬上被釋放,甚至可能根本不會被釋放(因為垃圾回收器可能不會工作),因此,資源釋放盡量另想辦法,別太相信finalize()和垃圾回收器了。

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

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


    網站導航:
     
    主站蜘蛛池模板: 亚洲精品美女久久久久| 亚洲女久久久噜噜噜熟女| 亚洲乱码中文论理电影| 99免费在线观看视频| 亚洲无线电影官网| 亚洲免费福利视频| 亚洲国产情侣一区二区三区| 国产免费的野战视频| 亚洲国产精品综合久久网各 | 久久久久久久久久久免费精品| 久久精品国产精品亚洲艾草网美妙 | 久久精品夜色噜噜亚洲A∨| 一边摸一边爽一边叫床免费视频| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 | 成全影视免费观看大全二| 亚洲第一第二第三第四第五第六| 美女黄网站人色视频免费国产| 亚洲精品色在线网站| 亚洲午夜精品第一区二区8050| 免费看一区二区三区四区| 亚洲五月六月丁香激情| 99久久综合国产精品免费| 国产综合成人亚洲区| 亚洲精品少妇30p| 亚洲黄色片免费看| 亚洲av成人无码网站…| 在线亚洲午夜理论AV大片| 亚洲av色香蕉一区二区三区蜜桃| 深夜国产福利99亚洲视频| 大地影院MV在线观看视频免费| 亚洲精品成人网站在线播放| 午夜精品在线免费观看| 成人片黄网站色大片免费观看cn| 亚洲黄色在线视频| 国产一级淫片a视频免费观看| 精品国产麻豆免费人成网站| 亚洲中文字幕人成乱码| 亚洲精品高清在线| 一本岛高清v不卡免费一三区| 乱淫片免费影院观看| 亚洲欧洲日韩在线电影|