<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 閱讀(1263) 評論(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
    我還以為我們對這個東西的理解不一樣呢。原來是筆誤啊,剛好出現在關鍵位置了,引起了誤會。

    主站蜘蛛池模板: 一级毛片aaaaaa视频免费看| 自拍偷自拍亚洲精品播放| 中文字幕无码毛片免费看| 亚洲综合色成在线播放| 又粗又长又爽又长黄免费视频 | 亚洲人成影院在线高清| 亚洲日本在线免费观看| 亚洲午夜一区二区电影院| 无码少妇一区二区浪潮免费| 亚洲精品国产日韩| 日本牲交大片免费观看| 在线亚洲精品视频| 国产精品亚洲二区在线观看| 东北美女野外bbwbbw免费| 亚洲AV成人无码久久精品老人| 久久久久免费看成人影片| 亚洲国产日韩综合久久精品| 超pen个人视频国产免费观看| 在线观看亚洲视频| 亚洲国产精品无码久久一线| 在线人成精品免费视频| 亚洲黄页网在线观看| 亚洲国产黄在线观看| 无码国产精品一区二区免费vr| 亚洲成人免费在线观看| 性xxxx视频播放免费| av片在线观看永久免费| 老司机亚洲精品影院| 免费黄色网址入口| a级毛片免费全部播放| 亚洲国产精品成人精品小说| 免费看片A级毛片免费看| 久久www免费人成看国产片| 亚洲成人午夜电影| 亚洲国产成人精品久久久国产成人一区二区三区综 | 成人免费a级毛片| 亚洲AV成人无码网天堂| 国产亚洲人成网站观看| 日韩国产免费一区二区三区| 日韩毛片一区视频免费| 亚洲成人免费网站|