一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看

淺談Java虛擬機垃圾收集算法的研究和改進(jìn)論文

時(shí)間:2024-08-19 07:08:45 其他類(lèi)論文 我要投稿

淺談Java虛擬機垃圾收集算法的研究和改進(jìn)論文

  1 垃圾收集基本算法研究和當前的瓶頸

淺談Java虛擬機垃圾收集算法的研究和改進(jìn)論文

  垃圾收集器的核心是識別和回收不可到達的對象,不同的垃圾收集實(shí)現使用不同的策略來(lái)完成,它們與用戶(hù)程序和調度器以不同的方式互動(dòng)。有幾種垃圾收集的基本策略: 引用計數、標記—清除、標記—整理和復制。此外,還可以按照系統運行方式來(lái)分類(lèi)算法,串行收集必須在用戶(hù)程序暫停時(shí)進(jìn)行整個(gè)收集,并行或并發(fā)收集是使用多線(xiàn)程進(jìn)行收集來(lái)提高效率。

  1. 1 垃圾回收基本算法研究

  引用計數是最基本的垃圾收集策略,早期的JVM 采用此算法,但是缺點(diǎn)也很明顯,如它不能回收不可到達的循環(huán)結構以及需要監控每一次的內存操作; 標志—清除算法主要包括掃描標志所有被應用對象,然后清除未引用對象兩個(gè)步驟,最大的不足是執行時(shí)需要暫停整個(gè)程序,以及容易在堆中產(chǎn)生碎片; 復制算法創(chuàng )新地提出把堆一分為二,其中一個(gè)區域包含當前使用的活躍的數據,另一個(gè)區域未使用,垃圾回收時(shí),遍歷當前已經(jīng)使用的有相關(guān)活躍對象的區域,把正在使用中的對象從當前區域復制到另外一個(gè)區域中,性能好,而且不會(huì )有碎片,主要問(wèn)題就是必須要兩倍的內存空間; 標記—整理算法則是結合了標記—清除和復制這兩個(gè)算法的優(yōu)點(diǎn),避免了需要兩倍內存空間的問(wèn)題,但增加了不少復雜性,該算法也是分兩階段,第一階段從對象根節點(diǎn)開(kāi)始標記所有被引用對象,第二階段遍歷整個(gè)堆,清除未標記對象并且把存活對象“壓縮”到堆的其中一塊,按內存順序排放; 分代收集利用統計學(xué)分析的方法來(lái)提高效率,分析表明大多數內存塊( 90%) 的生存周期都比較短,垃圾收集器應當把更多的精力放在檢查和清理新分配的內存塊上,它是基于對象的生存周期統計分析后得出的算法,把對象分為年青代( 年輕的新生對象) 、年老代( 經(jīng)過(guò)幾次回收仍然存活的對象) 、持久代( 靜態(tài)文件、JAVA 類(lèi)、方法等) ,對不同生命周期的對象使用不同的算法( 如標記整理) 進(jìn)行回收。

  1. 2 垃圾回收的瓶頸

  經(jīng)過(guò)不斷的算法創(chuàng )新和改進(jìn),垃圾回收方式已經(jīng)在內存空間效率和CPU 時(shí)間效率兩個(gè)方面有了非常大的提升。但仍然無(wú)法解決完全GC 帶來(lái)的暫停問(wèn)題。在一些對實(shí)時(shí)性要求很高的應用情形下( 如期望返回時(shí)間在幾百毫秒以?xún)?,如果分代垃圾回收方式要達到這個(gè)指標,只能把最大堆的設置限制在一個(gè)較小范圍內,但是這樣又和應用本身的處理能力產(chǎn)生很大的矛盾,同樣也是不能接受的。即垃圾收集的周期,以及每次收集的時(shí)間還是不確定。

  2 新改進(jìn)的算法

  新改進(jìn)的算法主要目標是在不犧牲堆空間利用效率和CPU 性能的前提下達到準實(shí)時(shí)( 可以設定和控制GC 最大暫停時(shí)間) ,如0. 5 秒。這個(gè)特性對于準實(shí)時(shí)響應的系統( 如電信系統) 而言非常重要,因為這樣就再也不用擔心系統會(huì )突然暫停兩秒這種情況的發(fā)生了。

  為了能夠達到期望的目標,新的算法在原有的各種算法上進(jìn)行了吸收和改進(jìn),第一方面: 新算法吸收了增量GC,將整個(gè)虛擬機堆劃分為多個(gè)固定大小的區域[5],這樣通過(guò)先在空間維度上的劃分,然后在小粒度上處理收集的方法,為實(shí)現整個(gè)實(shí)時(shí)性目標打下一個(gè)基礎。第二方面,采用了并發(fā)的快照掃描算法,進(jìn)行全局范圍的未到達對象周期性完整掃描。同時(shí)掃描時(shí)統計了每個(gè)小區域中的活躍對象。這個(gè)信息幫助后續選擇哪一個(gè)區域進(jìn)行回收。第三方面,采用新的選擇回收機制估算區域級垃圾回收時(shí)間,然后根據限值選擇相應的區域。

  2. 1 新算法堆分區和區域結構

  新算法將堆劃分為多個(gè)固定大小的區域,每個(gè)區域都是在內存中一塊連續的區域。當一塊區域放滿(mǎn)后,會(huì )申請新的一塊區域來(lái)存放,空的區域用鏈表結構組織起來(lái)。區域之間的對象引用通過(guò)“關(guān)系集合”來(lái)維護,對于巨大的對象,如超過(guò)一個(gè)區域的一半以上,用專(zhuān)用的一個(gè)堆來(lái)處理這類(lèi)對象。每個(gè)區域都有一個(gè)關(guān)系集合,關(guān)系集合中包含了從其他區域中引用當前區域中相關(guān)對象的引用地址,隨著(zhù)程序的操作,新引用或解除當前區域中的一個(gè)對象都會(huì )在關(guān)系集合中做出相應的修改。這個(gè)關(guān)系集合主要維護跨區域的對象引用聯(lián)系。區域1,3中都引用了區域2 的對象b,所以區域2 關(guān)系集合中維護了相應的關(guān)系。這些區域中對象的引用關(guān)系不斷地發(fā)生改變,新算法采用了卡片表來(lái)通知區域修改“關(guān)系集合”,每個(gè)應用的線(xiàn)程都有一個(gè)關(guān)聯(lián)的關(guān)系集合記錄,用于緩存和順序化線(xiàn)程運行時(shí)造成的對于卡片的修改。另外,還有一個(gè)全局的緩存區,當應用線(xiàn)程執行時(shí)修改了卡片后,如果造成的改變僅為同一區域中的對象之間的關(guān)聯(lián),則不記錄關(guān)系集合歷史; 如造成的改變?yōu)榭鐓^域中的對象的關(guān)聯(lián),則記錄到線(xiàn)程的關(guān)系集合歷史; 如線(xiàn)程的關(guān)系集合歷史滿(mǎn)了,則放入全局的緩存區中,線(xiàn)程自身則重新創(chuàng )建一個(gè)新的關(guān)系集合歷史,關(guān)系集合本身也是一個(gè)由一堆卡片構成的哈希表。

  下面是具體垃圾回收執行步驟。

  2. 2 初始化標記

  這是第一個(gè)步驟,支持多線(xiàn)程并發(fā)執行。主要任務(wù)是掃描并標識出虛擬機每個(gè)區域中可直接訪(fǎng)問(wèn)到的對象。虛擬機每個(gè)區域都保存了兩個(gè)標識作用的位圖,位圖中每個(gè)元素用來(lái)標識可到達的對象。一個(gè)名稱(chēng)為最近引用的位圖,用來(lái)保存最近掃描標志的結果。另外一個(gè)為當前引用位圖,用來(lái)存放當前正在計算的臨時(shí)結果。當計算完成時(shí),會(huì )把結果復制到最近引用位圖中。位圖中包含了一個(gè)地址信息來(lái)指向區域中對象的起始點(diǎn)。

  新算法設定了相關(guān)的條件來(lái)觸發(fā)初始化標記這一步驟。定義了一個(gè)虛擬機堆大小的上限,稱(chēng)為high,另外還有一個(gè)H,H 的值為( 1-high) * 堆大小,根據虛擬機的運行情況進(jìn)行動(dòng)態(tài)的調整,如果引入分代方式,新算法還定義了一個(gè)限值,當堆中使用的內存超過(guò)了限值時(shí),就會(huì )在一次清除執行完畢后在應用允許的GC 暫停時(shí)間范圍內盡快地執行此步驟。

  2. 3 遍歷并發(fā)標記

  根據前面初始化標記掃描到的對象進(jìn)行遍歷,以便識別這些對象的下層對象的活躍狀態(tài),對于在此期間應用線(xiàn)程并發(fā)修改的對象則記錄到關(guān)系集合歷史中,采用開(kāi)始時(shí)刻點(diǎn)快照的方式進(jìn)行對象遍歷。這一過(guò)程是并行執行的,不會(huì )暫停應用程序線(xiàn)程。應用程序線(xiàn)程新創(chuàng )建的對象則放入比快照頂端值更高的地址區間中,這些新創(chuàng )建的對象默認狀態(tài)即為活躍的,這一過(guò)程同時(shí)修改頂端值的信息。這樣的設計不僅可以不影響應用程序,而且提高了效率。由于是并行的環(huán)境,在做并發(fā)標記掃描時(shí)還需要處理一種情況,就是其他程序修改當前快照里的對象應用。系統允許這樣的修改,但是需要記錄這樣的修改到后續步驟處理它。

  2. 4 標記停止

  標志停止這個(gè)點(diǎn)除了需要滿(mǎn)足遍歷所有對象和清空當前的標志堆棧事件這兩個(gè)條件外,還需要處理前面一步由于其它線(xiàn)程的修改保留下來(lái)的記錄。前面兩個(gè)條件容易判斷,后一個(gè)條件處理比較困難。因為這些記錄放在相關(guān)的線(xiàn)程中,需要等待相應線(xiàn)程操作結束后處理,有可能會(huì )引起一些等待。

  2. 5 存活計算活對象和清除

  前面有提過(guò)采用新的機制為了達到準實(shí)時(shí)目標。主要的算法根據前面統計的活躍對象數,設計算法比較精確地估算出每個(gè)區域的垃圾回收時(shí)間,如公式( 1) 所示。同時(shí)根據系統設定的目標最大暫停時(shí)間,來(lái)選擇活躍對象最少、垃圾對象最多、收集最快的區域進(jìn)行回收,這樣能保證最有效率,而且暫停時(shí)間最短。如果超過(guò)設定的目標最大暫停時(shí)間,系統會(huì )推遲收集來(lái)權衡目標,通過(guò)一段時(shí)間,會(huì )有更多的非活躍對象。

  C( tc) = Cfix + A* N +Σr∈tc

  ( T* size( r) +

  S* active( r) ) ( 1)

  tc 表示收集當前區域估算所需時(shí)間成本,C 表示固定的一些步驟開(kāi)銷(xiāo)。A 表示掃描卡片的平均時(shí)間,N 表示卡片數量,T 表示從關(guān)系結合中掃描出卡片的時(shí)間, size( r) 表示在關(guān)系集合r 中卡片數。S表示每個(gè)字節的掃描成本,active( r) 表示當前區域r中的存活字節數量。

  在新算法中,標記停止步驟執行完,不一定會(huì )執行清除這一步驟,由于清除步驟需要暫停應用對系統有一定的影響,新算法為了能夠達到準實(shí)時(shí)的要求,需要根據用戶(hù)指定的最大的GC 暫停時(shí)間設定和公式( 1) 估算出的時(shí)間成本相結合來(lái)合理地規劃清除動(dòng)作。另外還有一些情況也會(huì )觸發(fā)清除這個(gè)步驟的執行,如新算法在采用復制方法的特殊步驟情形下,采取的是當已經(jīng)使用的內存空間達到了上__限時(shí),就執行清除這個(gè)策略以保證有足夠的空間用來(lái)做復制動(dòng)作。再比如新算法在分代模式的情形下,根據用戶(hù)指定的可接受的暫停時(shí)間和回收年輕代區域需要消耗的時(shí)間來(lái)估算出一個(gè)年輕代區域存活的數量的最大值,當虛擬機中分配對象的年輕區域存活的數量達到此值時(shí),就會(huì )執行清除。

  在這一過(guò)程中,在一些特定的情形下,會(huì )采用疏散壓縮的計算來(lái)提高效率,主要是針對比較新的計算。比如說(shuō)發(fā)現絕大部分當前區域的對象可以被回收掉,會(huì )立刻執行回收清除動(dòng)作,然后剩下的對象疏散到其他區域,這樣的動(dòng)作非常大地提高了效率,而且支持并發(fā)執行。這樣在多處理器的環(huán)境下更能提高效率。

  運用新算法是為了盡量做到準實(shí)時(shí)的響應,例如估算暫停時(shí)間的算法、對于經(jīng)常被引用的對象的特殊處理等,運用新算法也是為了能夠讓GC 既能夠充分地回收內存,又能夠盡量少地導致應用的暫停。

  3 實(shí)驗結果與分析

  通過(guò)在幾種典型的準實(shí)時(shí)應用場(chǎng)景中進(jìn)行實(shí)驗,對新算法和增量式垃圾回收算法在垃圾回收效率、平均暫停時(shí)間、暫停次數及堆空間使用等方面進(jìn)行比較。運用新算法后各方面都有比較大的性能提升。新算法使用C 語(yǔ)言實(shí)現,而增量式垃圾回收算法直接使用Sun JDK 提供的算法。實(shí)驗的應用場(chǎng)景包括一個(gè)大型的游戲應用和一個(gè)企業(yè)級的產(chǎn)品管理系統。同時(shí)還可以根據應用的情況,調節參數使系統達到比較好的狀態(tài)。

  4 結束語(yǔ)

  為了實(shí)現準實(shí)時(shí)的目標,本文提出了一種新的垃圾回收算法,在堆空間劃分、并發(fā)掃描及區域垃圾回收成本等方面做了很大的改進(jìn),將因垃圾收集而導致的程序暫停時(shí)間和次數限制在一個(gè)可以設定的范圍內,并可以通過(guò)相關(guān)的配置參數的調節,達到一個(gè)在時(shí)間和空間成本比較高效率的狀態(tài),滿(mǎn)足了實(shí)時(shí)性應用所要求的短暫停,并且在應用環(huán)境下取得了令人比較滿(mǎn)意的效果,這對于有巨大緩存的各種應用而言,會(huì )有很大的幫助。

【淺談Java虛擬機垃圾收集算法的研究和改進(jìn)論文】相關(guān)文章:

詳談改進(jìn)的遺傳算法求解柔性作業(yè)車(chē)間調度問(wèn)題論文12-16

淺談轉爐除塵濁環(huán)系統水泵的優(yōu)化改進(jìn)論文02-18

淺談全電流不停電啟和停槽技術(shù)的研究與應用的論文01-03

淺談小學(xué)作文的閱讀和寫(xiě)作論文03-09

淺談高校教育教學(xué)改革的研究論文03-25

淺談成本會(huì )計的教學(xué)效果和改進(jìn)措施論文11-08

淺談石油化工企業(yè)消防污水收集與處理論文02-21

淺談鑄造橫梁結構改進(jìn)有限元分析論文02-19

淺談水利工程設計中存在的問(wèn)題及改進(jìn)措施論文03-02

淺談中職化工專(zhuān)業(yè)英語(yǔ)教學(xué)改進(jìn)探析論文03-16

  • 相關(guān)推薦
一级日韩免费大片,亚洲一区二区三区高清,性欧美乱妇高清come,久久婷婷国产麻豆91天堂,亚洲av无码a片在线观看