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

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

Java的垃圾回收機制研究

2019-11-18 13:44:10
字體:
來源:轉載
供稿:網友

  一、誰在做Garbage Collection?

  一種流行的說法:在C++里,是系統在做垃圾回收;而在java里,是Java自身在做。

  在C++里,釋放內存是手動處理的,要用delete運算符來釋放分配的內存。這是流行的說法。確切地說,是應用認為不需要某實體時,就需用delete告訴系統,可以回收這塊空間了。這個要求,對編碼者來說,是件很麻煩、很難做到的事。隨便上哪個BBS,在C/C++版塊里總是有一大堆關于內存泄漏的話題。

  Java采用一種不同的,很方便的方法:Garbage Collection.垃圾回收機制放在JVM里。JVM完全負責垃圾回收事宜,應用只在需要時申請空間,而在拋棄對象時不必關心空間回收問題。

  二、對象在啥時被丟棄?

  在C++里,當對象離開其作用域時,該對象即被應用拋棄。

  是對象的生命期不再與其作用域有關,而僅僅與引用有關。

  Java的垃圾回收機制一般包含近十種算法。對這些算法中的多數,我們不必予以關心。只有其中最簡單的一個:引用計數法,與編碼有關。

  一個對象,可以有一個或多個引用變量指向它。當一個對象不再有任何一個引用變量指向它時,這個對象就被應用拋棄了?;蛘哒f,這個對象可以被垃圾回收機制回收了。

  這就是說,當不存在對某對象的任何引用時,就意味著,應用告訴JVM:我不要這個對象,你可以回收了。

  JVM的垃圾回收機制對堆空間做實時檢測。當發現某對象的引用計數為0時,就將該對象列入待回收列表中。但是,并不是馬上予以銷毀。

  三、丟棄就被回收?

  該對象被認定為沒有存在的必要了,那么它所占用的內存就可以被釋放。被回收的內存可以用于后續的再分配。

  但是,并不是對象被拋棄后當即被回收的。JVM進程做空間回收有較大的系統開銷。假如每當某應用進程丟棄一個對象,就立即回收它的空間,勢必會使整個系統的運轉效率非常低下。

  前面說過,JVM的垃圾回收機制有多個算法。除了引用計數法是用來判定對象是否已被拋棄外,其它算法是用來確定何時及如何做回收。JVM的垃圾回收機制要在時間和空間之間做個平衡。

  因此,為了提高系統效率,垃圾回收器通常只在滿足兩個條件時才運行:即有對象要回收且系統需要回收。切記垃圾回收要占用時間,因此,Java運行時系統只在需要的時候才使用它。因此你無法知道垃圾回收發生的精確時間。

  四、沒有引用變量指向的對象有用嗎?

  前面說了,沒掛上引用變量的對象是被應用丟棄的,這意味著,它在堆空間里是個垃圾,隨時可能被JVM回收。

  不過,這里有個不是例外的例外。對于一次性使用的對象(有些書稱之為臨時對象),可以不用引用變量指向它。舉個最簡單也最常見的例子:

  System.out.PRintln(“I am Java!”);

  就是創建了一個字符串對象后,直接傳遞給println()方法。

  五、應用能干預垃圾回收嗎?

  許多人對Java的垃圾回收不放心,希望在應用代碼里控制JVM的垃圾回收運作。這是不可能的事。對垃圾回收機制來說,應用只有兩個途徑發消息給JVM.第一個前面已經說了,就是將指向某對象的所有引用變量全部移走。這就相當于向JVM發了一個消息:這個對象不要了。第二個是調用庫方法System.gc(),多數書里說調用它讓Java做垃圾回收。

  第一個是一個告知,而調用System.gc()也僅僅是一個請求。JVM接受這個消息后,并不是立即做垃圾回收,而只是對幾個垃圾回收算法做了加權,使垃圾回收操作輕易發生,或提早發生,或回收較多而已。

  希望JVM及時回收垃圾,是一種需求。其實,還有相反的一種需要:在某段時間內最好不要回收垃圾。要求運行速度最快的實時系統,非凡是嵌入式系統,往往希望如此。

  Java的垃圾回收機制是為所有Java應用進程服務的,而不是為某個特定的進程服務的。因此,任何一個進程都不能命令垃圾回收機制做什么、怎么做或做多少。

  六、對象被回收時要做的事

  一個對象在運行時,可能會有一些東西與其關連。因此,當對象即將被銷毀時,有時需要做一些善后工作??梢园堰@些操作寫在finalize()方法(常稱之為終止器)里。

  protected void finalize()

  {

  // finalization code here

  }

  這個終止器的用途類似于C++里的析構函數,而且都是自動調用的。但是,兩者的調用時機不一樣,使兩者的表現行為有重大區別。C++的析構函數總是當對象離開作用域時被調用。這就是說,C++析構函數的調用時機是確定的,且是可被應用判知的。但是,Java終止器卻是在對象被銷毀時。由上所知,被丟棄的對象何時被銷毀,應用是無法獲知的。而且,對于大多數場合,被丟棄對象在應用終止后仍未銷毀。

  在編碼時,考慮到這一點。譬如,某對象在運作時打開了某個文件,在對象被丟棄時不關閉它,而是把文件關閉語句寫在終止器里。這樣做對文件操作會造成問題。假如文件是獨占打開的,則其它對象將無法訪問這個文件。假如文件是共享打開的,則另一訪問該文件的對象直至應用終結仍不能讀到被丟棄對象寫入該文件的新內容。

  至少對于文件操作,編碼者應認清Java終止器與C++析構函數之間的差異。

  那么,當應用終止,會不會執行應用中的所有finalize()呢?據BrUCe Eckel在Thinking in Java里的觀點:“到程序結束的時候,并非所有收尾模塊都會得到調用”。這還僅僅是指應用正常終止的場合,非正常終止呢?

  因此,哪些收尾操作可以放在finalize()里,是需要酌酎的。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩精品视频中文在线观看| 日韩精品免费在线视频观看| 国产一区二区日韩精品欧美精品| 欧美俄罗斯性视频| 久久99热精品这里久久精品| 国产精品视频白浆免费视频| 欧美激情精品久久久| 91tv亚洲精品香蕉国产一区7ujn| 97av视频在线| 最新中文字幕亚洲| 日韩中文字幕视频在线| 久久久久久久亚洲精品| xxav国产精品美女主播| 国产在线观看精品一区二区三区| 欧美亚洲在线视频| 日韩美女av在线免费观看| 欧美高清性猛交| 中文一区二区视频| 欧美日韩美女在线观看| 97在线视频免费| 成人激情视频在线播放| 日韩欧美在线网址| 国产精品成人久久久久| 久久精品国产久精国产一老狼| 91在线视频导航| 国产精品欧美一区二区三区奶水| 懂色av一区二区三区| 在线视频日韩精品| 美女视频黄免费的亚洲男人天堂| 日韩视频免费大全中文字幕| 另类专区欧美制服同性| 奇米一区二区三区四区久久| wwwwwwww亚洲| 伊人久久免费视频| 亚洲欧美第一页| 日韩中文字幕精品视频| 亚洲色图日韩av| 韩国三级日本三级少妇99| 91影视免费在线观看| 蜜臀久久99精品久久久无需会员| 国产精品视频精品视频| 欧美一级视频一区二区| 国产不卡在线观看| 国产精品视频久久久| 国产成人精品电影| 日韩电影中文字幕一区| 国产精品对白刺激| www.日韩系列| 91po在线观看91精品国产性色| 色樱桃影院亚洲精品影院| 国产精品久久久久久五月尺| 国产999精品久久久影片官网| 97在线视频免费| 国产亚洲精品久久久久久777| 国产在线高清精品| 亚洲精品免费网站| 欧美巨乳美女视频| 欧美激情精品久久久久久久变态| 最近更新的2019中文字幕| 日韩av123| 欧美黄色免费网站| 日本欧美中文字幕| 成人免费在线视频网址| 日韩大片免费观看视频播放| 国产精品中文久久久久久久| 日韩在线视频线视频免费网站| 亚洲成人精品在线| 清纯唯美亚洲综合| 国产在线观看精品一区二区三区| 欧美成人一区二区三区电影| 国产视频久久网| 97在线视频精品| 日韩中文在线中文网三级| 日韩有码片在线观看| 欧美性受xxxx黑人猛交| 欧美黑人一级爽快片淫片高清| 欧美大尺度激情区在线播放| 97成人在线视频| 欧美第一黄网免费网站| 国产精品一香蕉国产线看观看| 成人精品视频在线| 欧美激情精品在线| 91九色国产社区在线观看| 国产精品主播视频| 91麻豆国产精品| 欧美激情免费在线| 久久免费视频观看| 69国产精品成人在线播放| 欧美日韩国产丝袜另类| 国产美女久久久| 在线观看国产成人av片| 欧美一级电影在线| 91亚洲永久免费精品| 日本韩国欧美精品大片卡二| 国产精品久久久久福利| 91香蕉嫩草神马影院在线观看| 亚洲无亚洲人成网站77777| 91久久在线视频| 成人美女免费网站视频| 亚洲成人免费网站| 热99精品只有里视频精品| 欧美亚洲视频一区二区| 国产男人精品视频| 久久久久久国产免费| 91wwwcom在线观看| 国产中文字幕91| 久久九九有精品国产23| 91精品中国老女人| 中文字幕日韩免费视频| 青青草精品毛片| 亚洲国产中文字幕久久网| 狠狠做深爱婷婷久久综合一区| 在线视频日本亚洲性| 国产精品久久久久久av福利| 91在线精品播放| 日韩欧美在线免费| 这里只有精品丝袜| 日本高清不卡在线| 欧美日本中文字幕| 亚洲欧美日本精品| 中文字幕少妇一区二区三区| 国产精品露脸自拍| 日韩欧美国产黄色| 欧美激情欧美狂野欧美精品| 亚洲第一色中文字幕| 国产欧美精品va在线观看| 亚洲精品成人久久| 亚洲区免费影片| 精品久久中文字幕| 日韩精品高清视频| 狠狠干狠狠久久| 一区二区三区精品99久久| 久久久久久久久国产精品| 亚洲国语精品自产拍在线观看| 日本精品视频网站| 国产精品丝袜白浆摸在线| 亚洲人免费视频| 中文字幕久久久av一区| 国产69久久精品成人| 中文字幕日韩高清| www.欧美精品一二三区| 国产欧美中文字幕| 国产欧美日韩精品丝袜高跟鞋| 日韩在线国产精品| xxxx欧美18另类的高清| 川上优av一区二区线观看| 26uuu日韩精品一区二区| 久久久久久久国产| 亚洲国产精品推荐| 日韩av最新在线观看| 黑人精品xxx一区| 91国产视频在线| 成人网在线视频| 国产在线播放不卡| 欧美成年人网站| 狠狠色狠狠色综合日日小说| 日韩欧美国产中文字幕| 亚洲视频在线观看免费| 久久影视电视剧免费网站| 日韩精品极品视频免费观看| 欧美精品一区三区| 91视频-88av| 亚洲成人动漫在线播放| 亚洲最大福利视频|