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

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

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

    posts - 82, comments - 269, trackbacks - 0, articles - 1
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    finalize函數的一點疑問

    Posted on 2006-11-23 15:21 itspy 閱讀(1277) 評論(6)  編輯  收藏 所屬分類: JAVA技術

    最近經常找工作面試,在復習一些基礎知識時,讓我想起了一個平時沒有留言到的問題,就是finalize與GC的關系。在查一些資料后還是不太明白,特別是下面一段話。

    根據Java語言規范,JVM保證調用finalize函數之前,這個對象是不可達的,但是JVM不保證這個函數一定會被調用。另外,規范還保證finalize函數最多運行一次。
    (上面的這句話來源:http://www-128.ibm.com/developerworks/cn/java/l-JavaMemoryLeak2/index.html


    這句話是不是可以理解:“finalize函數可能不會被運行,并且就算運行也只會被運行一次?”


    那么很自然的就要問,它在哪些情況會被調用,在哪些情況下不會被調用。

    如果不被調用,那么如何釋放一些特定的資源呢?


    我以前一直理解的是,它一定會在對象被回收之前被調用,也就是GC會保證它運行一次,也就是肯定會運行一次。


    評論

    # re: finalize函數的一點疑問  回復  更多評論   

    2006-11-23 16:40 by BeanSoft
    正確,呵呵,有可能不運行就被回收了..

    # re: finalize函數的一點疑問  回復  更多評論   

    2006-11-23 16:46 by reital
    是這樣的,如果jvm覺得對內存不足,會進行回收,會收到一個對象的時候就會調用這個對象的finilize函數,但是還存在一種情況,就是jvm沒有覺得堆內存不足你的程序就已經結束了,所以也不會對對象進行回收,當然也調用不了這個函數。

    # re: finalize函數的一點疑問  回復  更多評論   

    2006-11-24 07:58 by swiftybin
    垃圾回收是由JVM控制的,所以如果一個對象沒有任何引用的話就成了垃圾,那么finalize方法有被調用的可能,可是如果直到程序運行結束推出了,JVM也沒有進行垃圾回收,那finalize方法肯定不會被調用。
    所以finalize要么不被調用,要么只被調用一次,因為調用后這個對象就沒啦,那它的finalize方法還怎么調用。

    # re: finalize函數的一點疑問  回復  更多評論   

    2006-11-24 09:37 by itspy
    我又找到了下面的參考文獻,這人講的比較清楚

    http://www.microsoft.com/china/MSDN/library/archives/technic/develop/vj/0515c.asp


    首先,只有當垃圾回收器釋放該對象的內存時,才會執行finalize()。如果在 Applet 或應用程序退出之前垃圾回收器沒有釋放內存,垃圾回收器將不會調用finalize()。

    樓上的說:
    “因所以finalize要么不被調用,要么只被調用一次,因為調用后這個對象就沒啦,那它的finalize方法還怎么調用。 ”
    這一點好像不太對,因為下面的參考文獻就給了一個反例:就是在finalize函數中,可以把對象重新變成可達的,這樣對象就不會被GC回收了。
    http://www-128.ibm.com/developerworks/cn/java/l-JavaMemoryLeak2/index.html

    # re: finalize函數的一點疑問  回復  更多評論   

    2006-11-27 22:37 by reital
    呵呵,更正一下:所以finalize要么不被調用,要么只被調用一次,因為調用后這個對象就沒啦,那它的finalize方法還怎么調用。
    應該是:應為推出后對象就沒有了。 筆誤,謝謝樓上給與指出。

    # re: finalize函數的一點疑問  回復  更多評論   

    2006-11-28 10:41 by itspy
    我還以為我們對這個東西的理解不一樣呢。原來是筆誤啊,剛好出現在關鍵位置了,引起了誤會。

    主站蜘蛛池模板: 亚洲高清无在码在线无弹窗| 亚洲国产精品狼友中文久久久| 久久久久亚洲AV片无码| 一区二区三区免费视频网站| 亚洲av无码成人精品区在线播放| 鲁啊鲁在线视频免费播放| 免费一级成人毛片| 一级一级毛片免费播放| 成人午夜亚洲精品无码网站| 男女一边桶一边摸一边脱视频免费| 久久久久亚洲精品男人的天堂| 亚欧乱色国产精品免费视频| 亚洲精品高清无码视频| 免费视频精品一区二区三区 | 99在线热视频只有精品免费| 亚洲日本国产乱码va在线观看| 日韩精品无码区免费专区| 亚洲一区二区三区在线观看网站 | 亚洲国产精品一区二区第一页免| 国产视频精品免费视频| 亚洲国产精品久久久久婷婷软件| 亚洲第一网站免费视频| 亚洲av永久无码| 国产精品亚洲美女久久久| 久草免费手机视频| 亚洲a∨无码男人的天堂| 日本一线a视频免费观看| h片在线观看免费| 亚洲精品在线播放| 国产自产拍精品视频免费看| caoporn成人免费公开| 亚洲一区中文字幕久久| 白白国产永久免费视频| 日日狠狠久久偷偷色综合免费| 亚洲va无码专区国产乱码| 插B内射18免费视频| 一级毛片不卡免费看老司机| 亚洲美女色在线欧洲美女| 免费无码一区二区三区蜜桃大| 国产精品综合专区中文字幕免费播放| 亚洲美女大bbbbbbbbb|