国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

垃圾自動收集系統指導 (2)

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

  停止和復制
  標記和清除法的兄弟就是停止和復制收集法了。停止和復制法解決了標記和清除法的碎片問題,但是對內存提出了更高的要求(或者是對一個較小的對象池進行更加頻繁的收集)。微軟的java虛擬機使用的就是這個算法,而在當時這是最快的虛擬機之一。
  停止和復制法的原理是為對象創建兩個內存池,但是每次只使用其中的一個。在你分配對象的時候,它就簡單地在活動的內存池中為你指定下一個可用空間。假如內存池填滿了——或者假如系統決定該收集了——它就進行同標記和清除法相同動作,跟蹤程序里系統對象的所有指針。但是不僅僅標記這些對象,它把它們從當前的內存池里復制到另一個非活動的內存池里。
  
  這個復制動作將活動著的對象一個一個安置到新的內存池里。一完成這個過程,它就將原來這個原本非活動的內存池切換成活動的。由于它只復制活動的對象,所以垃圾對象被留了下來。要收集的總是會比要扔掉的少。復制這一過程事實上整理了新的內存池,因為對象是一個接一個放置的。
  停止和復制法仍然必須要停止正在運行的程序,以收集對象并把它們移到內存池里。在這個算法運行的時候,它在清理的應用程序會停下來,導致程序的波動。
  世代
  活動垃圾收集法的輪廓揭示了一些基礎性錯誤,這些錯誤在垃圾收集算法如何工作同垃圾需要如何被收集比較時產生。正在運行的應用程序的大多數對象只會存活很短的時間,只有極少數會存活在應用程序運行的全過程中。前面勾畫的算法平等地處理所有對象。不幸的是,每個活動的對象都需要被處理(例如移動、標記),這會對性能造成負面影響。長時間存活的對象是持續的——所以不需要——在每次收集時被移來移去。
  
  當前,像最新的Java Hotspot虛擬機里使用的垃圾收集程序分別為新老對象創建各自的內存池,這樣的新老對象叫做“代”。假如一個對象經歷了特定的收集次數(有的時候就一次,但是次數依靠于收集程序),它就被從新內存池移到老內存池里。老內存池,從本質上講,收集的次數會更少,這樣考慮的原因是:既然這些對象已經存活了一段時間了,它們會存活得更長。
  這樣就大大降低了垃圾收集程序的負載。一輪收集過程中就結束的短時間存活對象對收集程序的影響較小,因為收集程序主要對存活的對象進行處理。對老一代對象的收集要少得多,這就減少了對老對象不必要的移動。
  不同的代甚至可以有不同的算法來處理它們。例如,停止和復制法適用于新對象池,因為它認為新對象結束得更快(對于非垃圾對象而言,停止和復制法的性能耗費是線性的)。對老一代的對象能夠采取額外的步驟以實現更加精確的算法,因為對性能的要求不是問題。
  好好利用垃圾收集
  盡管有各種好處,垃圾收集法仍然會從正在運行的應用程序手中搶奪CPU。要最小化這種影響的最好辦法其實很簡單:少創建對象。更少的對象需要更少收集操作,理論上這會提高性能。
  垃圾收集是邁向擺脫每日編程中一些難纏細節的堅實步驟。這個問題是過去幾年討論的熱點。現在所使用的技術已經很老了(從計算機領域來看),所以是該好好利用垃圾收集程序的時候了。

上一篇:連接池用法

下一篇:Jar clone的版本沖突

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪洞县| 印江| 扎赉特旗| 四川省| 云和县| 雷州市| 苍南县| 岳普湖县| 辛集市| 英德市| 天峻县| 平阳县| 扬州市| 五常市| 临城县| 延吉市| 巴彦淖尔市| 高安市| 通榆县| 安远县| 手机| 玉山县| 南溪县| 东莞市| 泰宁县| 通渭县| 滕州市| 陇川县| 仁怀市| 高陵县| 咸阳市| 洛阳市| 建德市| 保定市| 河池市| 周宁县| 凭祥市| 湄潭县| 贵定县| 栖霞市| 容城县|