- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java 理論與實踐: JVM 1.4.1 中的垃圾收集
內容:
舊物件和新物件
分代收集(Generational Collection)
JDK 1.4.1 預設收集器
微調垃圾收集器
結語
參考資料
關於作者
對本文的評價
相關內容:
Java 理論與實踐 系列
Mash that trash -- Incremental compaction in the IBM JDK Garbage Collector
Sensible sanitation -- Understanding the IBM Java Garbage Collector, Part 1: Object allocation
IBM Developer Kits for the Java platform (downloads)
訂閱:
dW 技術電子報
分代及並行垃圾收集
Brian Goetz
首席顧問, Quiotix Corp
2003 年 12 月 01 日
在上月的 Java 理論與實踐 中,專欄作家 Brian Goetz 回顧了垃圾收集的基本演算法。本月,他進一步探討 JVM 1.4.1 是如何實際處理 Garbage Collection ,包括一些新的針對多處理器系統 的 Garbage Collection 。請在本文 論壇 上與作者及其它讀者分享您對本文的心得(您也可以按下文章頂部或底部的討論 進入此論壇)。
上個月,我們分析了參照計數(Reference Counting)、複製(Copying)、標籤-清除(mark-sweep)和標籤-整理(mark-compact)這些經典的 Garbage Collection 技術。其中每一種方法在特定條件下都有其優點和缺點。例如,當有很多物件成為垃圾時,複製可以做得很好,但是有許多長久物件時它就變得很糟(要反覆複製它們)。相反,標籤-整理對於長久物件可以做得很好(只複製一次),但是當有許多短暫物件時就沒有那麼好了。JVM 1.2 及以後版本使用的技術稱為分代垃圾收集(generational garbage collection),它結合這兩種技術的優點,讓物件指派的負擔變小。
舊物件和新物件
在任何一個應用程式Heap 中,一些物件在建立後很快就成為垃圾,另一些則在程式的整個執行期間一直保持生存。經驗分析表 示,對於大多數物件導向語言,包括 Java ,絕大多數物件 ─ 可以多達 98%(這取決於您對新物件的衡量標準)是在年輕的時候死亡的。可以用小時鐘秒數、物件指派以後記憶體管理子系統指派的總位元組或者物件指派後經歷的 Garbage Collection 次數來計算物件的壽命。但是不管您如何計算,分析顯示一件事 ─ 大多數物件是在年輕的時候死亡的。大多數物件在年輕時死亡這一事實對於收集器的選擇很有意義。特別是,當大多數物件在年輕時死亡時,複製收集器可以執行得相當好,因為複製收集器完全不存取死亡的物件,它們只是將活的物件複製到另一個Heap 欄位中,然後一次收回所有的剩餘空間。
那些經歷過第一次 Garbage Collection 後仍能生存的物件,大部分會成為長久的或者永久的物件。根據短暫物件和長久物件的混合比例,不同 Garbage Collection 策略的效能會有非常大的差別。當大多數物件在年輕時死亡時,複製收集器可以 執行得很好,因為年輕時死亡的物件永遠不需要複製。不過,複製收集器處理長久物件卻很糟糕,它要從一個半空間向另一個半空間反覆來回複製這些物件。相反,標籤-整理收集器對於 長久物件可以工作得很好,因為長久物件趨向於沉在 Heap 的底部,因此不用再複製。不過,標籤-清除 和 標籤-理整 收集器要做很多額外的分析死亡物件的工作,因為在清除階段它們必須分析 Heap 中的每一個物件。
分代收集(Generational Collection)
分代收集器將 Heap 分為多個世代。在新世代中建立的物件,滿足某些提升標準的物件,如經歷了特定次數 Garbage Collection 的物件,將被提升到下一更舊的世代。 分代收集器對不同的世代可以自由使用不同的收集策略,對各世代分別進行 Garbage Collection。
次要收集 (Minor Collection)
分代收集的一個優點是它不同時收集所有的世代,因此可以使 Garbage Collection 暫停更短。當指派器不能滿足指派請求時,它首先觸發一個要收集(minor collection),它只收集最新的世代。因為新世代中的許多物件
文档评论(0)