隨筆 - 0, 文章 - 75, 評(píng)論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          java垃圾回收

          簡單看了一下異常處理的課件,感覺內(nèi)容還是可以的,不過少了自定義異常的知識(shí),所以決定把自定義異常內(nèi)容加入進(jìn)去;當(dāng)看到finally關(guān)鍵字的時(shí)候,想起年輕的時(shí)候找工作,經(jīng)常被問到finally、final、與finalize之間的區(qū)別。

          finally和final都給介紹了,所以這里簡單說一下finalize。

          說道finalize這個(gè)關(guān)鍵字就要說道java的垃圾回收機(jī)制。

          在C++處理某實(shí)體時(shí),當(dāng)應(yīng)用不需要某實(shí)體時(shí),就需要調(diào)用delete關(guān)鍵字來告訴系統(tǒng),我不需要這塊空間了,對(duì)于C++程序員來說,需要手動(dòng)調(diào)用,所以是一個(gè)很麻煩很難做的事情,經(jīng)常會(huì)看到一些技術(shù)網(wǎng)站昏天暗地地討論C++內(nèi)存泄漏的話題,有些時(shí)候討論的激烈了,怕是只要見面就會(huì)動(dòng)手了。

          在Java中程序員完全不用考慮實(shí)體銷毀,也就是只需要考慮實(shí)體聲明,具體如何銷毀實(shí)體是JVM要做的工作。

          JVM的垃圾回收機(jī)制是實(shí)時(shí)監(jiān)控堆內(nèi)存,當(dāng)發(fā)現(xiàn)某些實(shí)體沒有引用時(shí)就會(huì)把這些實(shí)體放入垃圾回收列表中,但這些放入回收列表中的實(shí)體并不是馬上被銷毀,具體何時(shí)被銷毀,那就是JVM的垃圾回收算法做的處理了。

          但是很多人還是不放心垃圾回收,所以想要自己控制Java的垃圾回收,在這里我要告訴你這是不可能的;但是你可以做一些處理,告訴JVM需要做垃圾回收了,讓JVM提前做垃圾回收處理,或者可以說讓JVM清理垃圾更容易發(fā)生。有兩種方法可以實(shí)現(xiàn)以上需求,第一種是把堆內(nèi)存中的引用變量移除,相當(dāng)于告訴JVM我已經(jīng)不用這個(gè)實(shí)體了;第二種是調(diào)用System.gc();調(diào)用這個(gè)方法后同樣可以讓JVM更容易發(fā)生垃圾回收。

          那這些和finalize有什么關(guān)系呢,在垃圾回收后,會(huì)自動(dòng)調(diào)用finalize()方法,注意,這個(gè)方法是Object中的方法,所以任何實(shí)體類都可以調(diào)用這個(gè)方法,finalize()方法被稱作是垃圾回收的善后方法。看如下例子。


          public
          class T2 {

          private String
          name;


          public String getName()
          {
            return name;

          }

          public void setName(String name)
          {
            this.name =
          name;
          }

          public T2(String name)
          {
            this.name =
          name;
          }

          public
          static void main(String[] args){
           
          for(int i = 0 ; i< 100; i++){
           
          new T2("T"+i);
           
          }
           
          System.gc();//讓JVM更容易發(fā)生垃圾回收
          }

          //重寫垃圾回收善后的方法
          public void
          finalize(){
           
          System.out.println(this.getName());

          }
          }

          運(yùn)行時(shí)會(huì)看到效果,如果去掉System.gc();這句話,幾乎看不到任何效果

          通過垃圾回收是不是對(duì)finalize有了進(jìn)一步的了解?

          posted on 2012-04-22 15:15 hantai 閱讀(126) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 宜宾县| 河间市| 石狮市| 乡宁县| 泾源县| 汝州市| 长沙县| 镇安县| 绥芬河市| 原阳县| 思南县| 阿克陶县| 东山县| 来凤县| 广东省| 晴隆县| 海口市| 汶川县| 彭州市| 武冈市| 盖州市| 博客| 贵州省| 文成县| 突泉县| 瑞丽市| 庐江县| 铜山县| 平凉市| 溆浦县| 陵川县| 东阿县| 拉萨市| 龙井市| 上林县| 平利县| 阿勒泰市| 邢台市| 南阳市| 清新县| 资源县|