Junky's IT Notebook

          統計

          留言簿(8)

          積分與排名

          WebSphere Studio

          閱讀排行榜

          評論排行榜

          JVM的垃圾回收機制詳解和調優

            1.JVM的gc概述

            gc即垃圾收集機制是指jvm用于釋放那些不再使用的對象所占用的內存。java語言并不要求jvm有gc,也沒有規定gc如何工作。不過常用的jvm都有gc,而且大多數gc都使用類似的算法管理內存和執行收集操作。

            在充分理解了垃圾收集算法和執行過程后,才能有效的優化它的性能。有些垃圾收集專用于特殊的應用程序。比如,實時應用程序主要是為了避免垃圾收集中斷,而大多數OLTP應用程序則注重整體效率。理解了應用程序的工作負荷和jvm支持的垃圾收集算法,便可以進行優化配置垃圾收集器。

            垃圾收集的目的在于清除不再使用的對象。gc通過確定對象是否被活動對象引用來確定是否收集該對象。gc首先要判斷該對象是否是時候可以收集。兩種常用的方法是引用計數和對象引用遍歷。

          1.1.引用計數
            引用計數存儲對特定對象的所有引用數,也就是說,當應用程序創建引用以及引用超出范圍時,jvm必須適當增減引用數。當某對象的引用數為0時,便可以進行垃圾收集。

          1.2.對象引用遍歷
            早期的jvm使用引用計數,現在大多數jvm采用對象引用遍歷。對象引用遍歷從一組對象開始,沿著整個對象圖上的每條鏈接,遞歸確定可到達(reachable)的對象。如果某對象不能從這些根對象的一個(至少一個)到達,則將它作為垃圾收集。在對象遍歷階段,gc必須記住哪些對象可以到達,以便刪除不可到達的對象,這稱為標記(marking)對象。

            下一步,gc要刪除不可到達的對象。刪除時,有些gc只是簡單的掃描堆棧,刪除未標記的未標記的對象,并釋放它們的內存以生成新的對象,這叫做清除(sweeping)。這種方法的問題在于內存會分成好多小段,而它們不足以用于新的對象,但是組合起來卻很大。因此,許多gc可以重新組織內存中的對象,并進行壓縮(compact),形成可利用的空間。

            為此,gc需要停止其他的活動活動。這種方法意味著所有與應用程序相關的工作停止,只有gc運行。結果,在響應期間增減了許多混雜請求。另外,更復雜的gc不斷增加或同時運行以減少或者清除應用程序的中斷。有的gc使用單線程完成這項工作,有的則采用多線程以增加效率。

          posted on 2006-06-04 22:16 junky 閱讀(318) 評論(1)  編輯  收藏 所屬分類: java

          評論

          # re: JVM的垃圾回收機制詳解和調優 2006-08-02 18:44 youke

          the title is big  回復  更多評論   

          主站蜘蛛池模板: 胶南市| 浦东新区| 高雄市| 德安县| 城口县| 体育| 禄丰县| 松原市| 安丘市| 四平市| 大安市| 台中县| 互助| 亚东县| 博兴县| 南平市| 邢台市| 志丹县| 延津县| 石楼县| 临洮县| 天长市| 唐山市| 寿宁县| 图木舒克市| 和平县| 富裕县| 曲靖市| 西盟| 青冈县| 仁化县| 民丰县| 平泉县| 丰镇市| 凌源市| 晋城| 房产| 新平| 华阴市| 六枝特区| 远安县|