亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

關于finalize()方法的解釋

2019-11-17 06:28:29
字體:
來源:轉載
供稿:網友

  我在thinking in java中看見以下一段代碼。

//:Garbage.java
//Demonstration of the garbage
//collector and finalization

class Chair {
    static boolean gcrun=false;
    static boolean f=false;
    static int created=0;
    static int finalized=0;
    int i;
    Chair(){
        i=++created;
        if(created==47)
            System.out.    }
    protected void finalize(){
        if(!gcrun){
            gcrun=true;
            System.out.println(
                "Beginning to finalize after"+created+
                "Chairs have been created");
        }
    if(i==47){
        System.out.println(
            "Finalizing Chair #47,"+
            "Setting flag to stop Chair creation");
        f=true;
    }
    finalized++;
    if(finalized>=created)
        System.out.println(
            "All"+finalized+"finalized");
    }
}

public class Garbage{
    public static void main(String[] args){
      if(args.length==0){
          System.out.println("Usage:/n"+
              "java Garbage before/n or:/n"+
              "java Garbage after");
          return;
      }
      while(!Chair.f){
          new Chair();
          new String("To take up space");
      }
      System.out.println(
          "After all chairs have been created:/n"+
          "total created ="+Chair.created+
          ",total finalized ="+Chair.finalized);
      if(args[0].equals("before")){
          System.out.println("gc():");
          System.gc();
          System.out.println("runFinalization():");
          System.runFinalization();
      }
      System.out.println("bye");
      if(args[0].equals("after"))
          System.runFinalizersOnExit(true);
    }
}///:-

為什么執行java Gerbage before
以后,當所有對象創建完(比如8000個),這時只清除了2000個(不定)
應該只能創建47個對象啊

分析:
首先,在一個循環當中創建對象,并且只是創建,而不引用,也就是說這個對象會自動的被系統當作垃圾處理掉。但請注重,finalize()方法并不是馬上就會執行的,執行的時間完全由系統來決定。所以很有可能的情況是已經創建了20000個對象,才開始其中的某一個對象的清除工作(這可能和時間或者系統內容的占用有關)??磃inalize()方法中的一段代碼:
    if (!gcrun) {
        gcrun = true;
        System.out.println(
            "/nBeginning to finalize after" + created + "Chairs have been created/nat ");
    }
就會出現這樣的結果:
Beginning to finalize after 25038 Chairs have been created

這時對象的創建過程仍在繼續(因為已經Finalize的對象還不滿47個,Chair.f還是false)。所以Chair.created會繼續增加。
直到有47個對象被清除了,Chair.f被置成true了,創建對象的循環才結束??磎ain方法中的一段代碼:
    System.out.println(
        "/nAfter all chairs have been created:/n"
            + "total created ="
            + Chair.created
            + ",total finalized ="
            + Chair.finalized+"/n");
如上所說,Chair.created是不斷增加的,而在這段代碼執行之前,又會有N個對象被釋放掉了,所以finalized也增加了。
結果可能是這樣的:
total created =29096,total finalized =73

其實這一過程和你使用的JVM有很大關系,執行結果可能會很不相同。但有一點是可以肯定的,那就是我們無法確定JVM什么時候做對象的清除工作(這也是Thinking in java中這段代碼的想要說明的),可能會在這個對象剛剛“無用”的時候就清除掉了,也可能滯后幾秒,甚至永遠不清除。

假如你的開發環境支持跟蹤的話,你可以以STEP的方式運行,你會看到運行結果大不相同。給你看看我的運行結果:
Created 47
Beginning to finalize after25038Chairs have been created
Finalizing Chair #47,Setting flag to stop Chair creation
After all chairs have been created:
total created =45993,total finalized =1800
gc():
runFinalization():
bye
All45993finalized

注重最后一行,因為人為的停頓,JVM有足夠的時間將所有的對象都清除了。

結論:
不能指望finalize()方法能穩定的工作,尤其不能依靠它來做文件的關閉等操作,由于finalize()的不確定性,往往得不到你想要的結果。事實上我們只需要知道所有無用的對象,JVM會自己清除就夠了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一本色道久久88亚洲综合88| 亚洲国产精品yw在线观看| www.日本久久久久com.| 久久人人爽国产| 欧美日韩视频在线| 综合136福利视频在线| 亚洲欧美日韩在线高清直播| 5278欧美一区二区三区| 精品中文字幕久久久久久| 久久久久久有精品国产| 97精品视频在线| 日本成人黄色片| 国内精品模特av私拍在线观看| 亚洲综合精品一区二区| 91精品久久久久久久久久入口| 国产精品美腿一区在线看| www亚洲欧美| 中文字幕国产亚洲2019| 2019亚洲日韩新视频| 伊是香蕉大人久久| 久热在线中文字幕色999舞| 日本欧美国产在线| 国产亚洲一区精品| 国产亚洲成av人片在线观看桃| 日韩在线观看网址| 欧美黑人狂野猛交老妇| 国产精品久久久久久久美男| 国产精品一区久久| 不卡在线观看电视剧完整版| 日韩小视频在线观看| 国产日韩在线一区| 久久精品久久久久电影| 欧美黑人巨大精品一区二区| 91亚洲精品一区| 国产精品久久久久久久久免费| 亚洲va久久久噜噜噜| 欧美在线视频一区二区| 欧美激情在线观看视频| 日韩精品中文字幕视频在线| 亚洲国产日韩欧美综合久久| 国产在线观看精品| 国产精品video| 精品中文字幕在线2019| 97免费中文视频在线观看| 亚洲精品欧美日韩| 欧美黄网免费在线观看| 国产精品白丝jk喷水视频一区| 国产中文字幕91| 久久久久久久久电影| 高清在线视频日韩欧美| 日韩经典一区二区三区| 日韩av网站在线| 国产va免费精品高清在线观看| 亚洲第一福利在线观看| 粉嫩老牛aⅴ一区二区三区| 亚洲成人精品视频在线观看| 国产精品久久久久久久久免费| 成人妇女免费播放久久久| 国内精品视频在线| 欧美高清在线观看| 国产精品自产拍高潮在线观看| 68精品国产免费久久久久久婷婷| 国产欧美日韩专区发布| 97视频免费看| 日韩av综合网站| 91精品视频专区| 美日韩精品免费观看视频| 夜夜嗨av一区二区三区免费区| 国产91免费观看| 国产精品最新在线观看| 亚洲自拍偷拍色图| 午夜精品久久久久久久久久久久久| 久久99亚洲热视| 中文字幕日韩精品有码视频| 国产精品久久久久91| 国产综合久久久久| 欧美激情国产日韩精品一区18| 亚洲摸下面视频| 欧美成人一区在线| 国产精品久久久久aaaa九色| 欧美俄罗斯乱妇| 全色精品综合影院| 亚洲精品欧美一区二区三区| 亚洲欧美综合另类中字| 色噜噜狠狠狠综合曰曰曰88av| 欧美激情亚洲精品| 欧美高清性猛交| 日韩av片永久免费网站| 中文字幕av一区二区三区谷原希美| 亚洲奶大毛多的老太婆| 97精品视频在线观看| 91国内揄拍国内精品对白| 中文字幕日韩欧美在线| 欧美猛少妇色xxxxx| 国产成人小视频在线观看| 九九九热精品免费视频观看网站| 欧美性猛交xxxx免费看| 欧美日韩综合视频| 欧美激情精品久久久久久| 久久99精品国产99久久6尤物| 亚洲美女久久久| 亚洲欧美综合精品久久成人| 日韩精品在线视频美女| 中文字幕av一区二区| 久久久久国产一区二区三区| www亚洲欧美| 欧美精品videossex88| 98精品在线视频| 久久精品久久精品亚洲人| 8090成年在线看片午夜| 97碰碰碰免费色视频| 午夜精品久久久久久久99热| 91亚洲国产成人久久精品网站| 日韩高清免费观看| 国产日本欧美一区| 色播久久人人爽人人爽人人片视av| 国产精品美女久久久久av超清| 日韩精品福利在线| 日韩免费高清在线观看| 国产日韩欧美一二三区| 日韩av片永久免费网站| 亚洲女人被黑人巨大进入| 久久视频国产精品免费视频在线| 美女扒开尿口让男人操亚洲视频网站| 国产精品夫妻激情| 青青青国产精品一区二区| 国产欧美精品在线播放| 中文字幕日韩精品在线观看| 午夜精品美女自拍福到在线| 97视频在线观看网址| 欧美三级欧美成人高清www| 97不卡在线视频| 欧美性感美女h网站在线观看免费| 久久久精品欧美| 欧美日韩亚洲网| 欧美区在线播放| 国产v综合ⅴ日韩v欧美大片| 影音先锋欧美在线资源| 国产精品免费久久久久久| 日韩在线高清视频| 久久韩国免费视频| 国产69精品久久久| 色午夜这里只有精品| 操人视频在线观看欧美| 国产一区玩具在线观看| 亚洲欧美中文日韩在线v日本| 91视频国产精品| 欧美成人在线影院| 亚洲一区二区三区毛片| 日韩精品免费一线在线观看| 欧美日韩国产区| 欧美一区二区大胆人体摄影专业网站| 91在线看www| 国产女同一区二区| 成人xvideos免费视频| 成人网欧美在线视频| 国产精品白丝jk喷水视频一区| 91禁国产网站| 亚洲福利在线视频| 久久久人成影片一区二区三区观看| 亚洲免费影视第一页| 欧美性精品220| 亚洲综合成人婷婷小说| 性金发美女69hd大尺寸|