色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ART虛擬機CMC GC算法核心實現介紹

Linux閱碼場 ? 來源:deepinthinking ? 2023-06-28 09:10 ? 次閱讀

一、當前GC算法及存在的問題

當前Android(O-T)一直使用的是Concurrent Copy GC算法(CC),該算法通過FromSpace和ToSpace兩個空間實現了非常巧妙的Copy機制,算是空間換時間(或者說復雜度),所以在GC的過程中,兩個Space會同時被利用,極端情況會占用內存會double。

此外,為了保證GC過程中,訪問對象的一致性,還引入的ReadBarrier,ReadBarrier會在訪問對象的時候判斷對象是否經過了拷貝,如果經過了拷貝需要返回拷貝后在ToSpace中的地址,反之,仍然返回拷貝前的地址。ReadBarrier會對每次對象訪問,都插入一次是否訪問的判斷,即使當前沒有在GC也會發生一次判斷。這就導致了執行了多余的指令,且在編譯結果二進制文件體積的增長。

總結一下,CC主要存在兩個問題:

GC過程物理內存徒增又陡降

為保證一致性引入了ReadBarrier

二、新的Concurrent Mark Compact GC算法

Android馬上要使能的新算法是Concurrent Mark Compact,簡稱CMC算法。CMC旨在解決上面介紹的CC算法存在的兩個問題,其中最核心的是利用Linux的UFFD特性,并且更新了Allocator算法。

1、UFFD特性介紹

UFFD全稱User Fault FD,其核心機制就是,先注冊并監控虛擬內存范圍的訪問,當該范圍的內存訪問出現異常時,比如SIGBUS錯誤時,可以把對這塊內存頁的處理交接給用戶空間。

此外,在沒有發生SIGBUS錯誤時,也可以利用UFFD的ioctl特性進行目標內存頁的處理。

2、BumpPointerSpace分配器

CMC對應的分配器是BumpPointerSpace,相對RegionSpace其結構更簡單,也更利于全局的內存拷貝壓縮。

3、GC拷貝壓縮的準備工作

在CMC對象初始化的時候,也會初始化跟內存拷貝壓縮的相關的數據結構。

在對Heap中對象進行全面遍歷標記的時候,會根據對象是否存活,來記錄和累加計算其壓縮后的地址,還有被壓縮后的各個內存頁的首個對象,主要的數據結構有:

創建info_map,其中包含:

chunk_info_vec:記錄存活對象的大小,所有該容器元素的累加和就是所有存活對象內存的大小。

first_objs_moving_space:會在PrepareForCompaction階段,記錄被壓縮后某頁的首個對象的源地址。

pre_compact_offset_moving_space:會記錄頁面被壓縮后的地址偏移。

創建compaction_buffers_map:會被用于壓縮過程中的頁面級別的壓縮,作為中轉緩存,最后再通過UFFD特性被拷貝到目標地址頁面。

① MarkingPhase階段

該階段會遍歷所有的對象,并在處理存活對象的時候,調用UpdateLivenessInfo函數,該函數主要做了下面兩個事情:

SetLiveWords記錄存活地址和大小

chunk_info_vec批量記錄活躍內存大小

② PrepareForCompaction階段

該階段比較重要的是InitMovingSpaceFirstObjects函數。該函數會找出每個需要移動的內存頁的第一個對象,并找出這些對象應該被復制到的目標頁偏移量

查找第一個live word,使用live_words_bitmap來找出第一個活動字的偏移量,然后計算出第一個活動對象的地址,并將第一個對象的地址和偏移量存儲到first_objs_moving_space和pre_compact_offset_moving_space向量中。2.函數進入一個循環,找出每個需要移動的頁的第一個對象和偏移量。并將它們存儲到first_objs_moving_space和pre_compact_offset_moving_space向量中。

4、單頁內存拷貝壓縮

單頁的拷貝主要是通過調用DoPageCompactionWithStateChange函數實現的,主要包含兩個步驟:

CompactPage:拷貝到中轉頁

CopyIoctl:通過UFFD拷貝中轉頁到目標頁地址

其中,CompactPage壓縮的輸入和處理過程如下:

輸入

first_objs_moving_space[idx]壓縮頁的第一個對象pre_compact_offset_moving_space[idx]壓縮頁offset

處理過程

基于live_words_bitmap_來遍歷內存頁中的存活對象,逐步將數據復制到目標地址到中轉頁。

5、并行拷貝壓縮

上一小節我們介紹了單頁拷貝壓縮的過程,全局的拷貝一般是從后往前的拷貝的,但是因為CMC也是并行的,所以GC過程中,非GC線程也就是Mutator線程還是會訪問對象的。CC算法是通過ReadBarrier實現這個階段數據一致性的,CMC是通過UFFD觸發的SIGBUS特性實現的,也就是當訪問一個對象時候,如果還沒有被分配就會導致SIGBUS異常,這時候虛擬機會通過UFFD的SIGBUS異常獲取缺頁的地址,從而觸發對應頁的拷貝壓縮。

總之,我們可以看到會有兩種頁拷貝和壓縮:

GC線程串行壓縮和拷貝

Mutator線程通過SIGBUS異常異步觸發

而為保證頁同時只會被一個線程處理,虛擬機通過ProcessState原子變量(每個頁都有一個)保證異步并行,等所有頁都被處理完后,GC過程就結束了。

6、其他內容

BlackAllocation(GC過程中新增的分配,被默認為黑色,不進行回收),通過SlidePage處理。

CompactPage和SlidePage中的跨頁對象處理。

壓縮后FromSpace頁的清理等。

三、CMC算法的優缺點

1、優點

GC過程中RSS峰值降低

消除了ReadBarrier,BinarySize減小,Object訪問性能提升

2、缺點

一次GC活躍的對象被拷貝兩次

暫時沒有實現YoungGC

缺頁中斷產生的時延可能會導致GC過程的性能退化





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 分配器
    +關注

    關注

    0

    文章

    194

    瀏覽量

    25778
  • CMC
    CMC
    +關注

    關注

    0

    文章

    34

    瀏覽量

    16758

原文標題:ART虛擬機CMC GC算法核心實現介紹

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    什么是虛擬機虛擬機真的那么好用嗎?

    在日新月異的科技世界中,虛擬化技術如同一座橋梁,連接著現實與數字的鴻溝,為我們打開了全新的計算維度。虛擬機,這一概念,自其誕生以來,就以其獨特的魅力和強大的功能,深深地影響了軟件開發、系統測試和云
    的頭像 發表于 07-06 08:05 ?463次閱讀
    什么是<b class='flag-5'>虛擬機</b>?<b class='flag-5'>虛擬機</b>真的那么好用嗎?

    介紹VirtualBox虛擬機的構建方法

    本系列文章將向大家介紹嵌入式系統開發的各方面知識。本文將向大家介紹VirtualBox虛擬機的構建方法。一、什么是虛擬機二、主流虛擬機三、V
    發表于 11-08 06:21

    基于虛擬機技術的DSC仿真系統設計

    提出了基于虛擬機技術的DCS仿真系統的實現方式,描述了虛擬控制器的具體實現方法及虛擬機技術的其他應用。
    發表于 12-03 17:26 ?26次下載
    基于<b class='flag-5'>虛擬機</b>技術的DSC仿真系統設計

    基于虛擬機技術的DCS仿真系統設計與實現

    提出了基于虛擬機技術的DCS仿真系統的實現方式,描述了虛擬控制器的具體實現方法及虛擬機技術的其他應用。
    發表于 01-16 15:04 ?2202次閱讀
    基于<b class='flag-5'>虛擬機</b>技術的DCS仿真系統設計與<b class='flag-5'>實現</b>

    具有可控虛擬機冗余度的啟發式分配算法

    在現代基于虛擬化的數據中心中,虛擬機分配是實現云中資源有效調度的首要考慮。已經證明對數據結點分配虛擬機并考慮虛擬機之間的通信延遲,使得最大通
    發表于 11-17 15:17 ?4次下載
    具有可控<b class='flag-5'>虛擬機</b>冗余度的啟發式分配<b class='flag-5'>算法</b>

    云計算中能耗和性能感知的虛擬機優化部署算法

    優化虛擬機部署是數據中心降低能耗的一個重要方法。目前大多數虛擬機部署算法都明顯地降低了能耗,但過度虛擬機整合和遷移引起了系統性能較大的退化。針對該問題,首先構建
    發表于 11-23 15:43 ?0次下載

    基于負載預測的虛擬機動態調度算法研究與實現

    了LFS算法,通過虛擬機歷史負載數據對虛擬機未來的負載變化情況進行預測,然后根據預測結果對虛擬機進行調度,能夠有效地避免云計算系統中高負載物理節點出現,
    發表于 11-24 14:44 ?9次下載
    基于負載預測的<b class='flag-5'>虛擬機</b>動態調度<b class='flag-5'>算法</b>研究與<b class='flag-5'>實現</b>

    基于動態調整閾值DTA的虛擬機遷移算法

    針對當前數據中心服務器能耗優化和虛擬機遷移時機合理性問題,提出一種基于動態調整閾值( DAT)的虛擬機遷移算法。該算法首先通過統計分析物理
    發表于 11-27 17:16 ?0次下載
    基于動態調整閾值DTA的<b class='flag-5'>虛擬機</b>遷移<b class='flag-5'>算法</b>

    檢測域劃分的虛擬機異常檢測算法

    系統的實時性和識別能力,提出基于改進K中心點聚類算法的檢測域劃分機制,在聚類迭代更新步驟上進行優化,以提升檢測域劃分的速度,并通過檢測域策略的應用來提高虛擬機異常檢測的效率和準確率。實驗及分析表明,改進的聚
    發表于 12-20 09:48 ?0次下載

    什么是區塊鏈虛擬機和普通虛擬機有啥區別

    區塊鏈技術領域基礎設施——虛擬機,是實現智能合約系統最為關鍵和核心的技術。智能合約不僅是業務邏輯的載體,同時又扎扎實實地落在了技術實現的層面。由此可見,
    發表于 03-04 10:50 ?4974次閱讀

    基于蟻群算法優化的虛擬機放置策略綜述

    基于蟻群算法優化的虛擬機放置策略綜述
    發表于 06-19 15:27 ?17次下載

    虛擬機的設計與實現:C\C++

    虛擬機的設計與實現:C\C++
    發表于 02-21 15:10 ?0次下載

    Docker與虛擬機的區別

    Docker和虛擬機是兩種不同的虛擬化技術,它們在實現方式、資源消耗、運行性能等方面存在許多差異。本文將會詳細介紹它們的區別。 一、實現方式
    的頭像 發表于 11-23 09:37 ?9839次閱讀

    怎么安裝linux虛擬機

    在計算機領域,虛擬機是一種軟件程序,它允許在主操作系統上運行多個虛擬操作系統。Linux虛擬機在開發、測試和學習等環境中得到廣泛應用。本文將詳細介紹如何安裝Linux
    的頭像 發表于 11-23 10:50 ?1124次閱讀

    虛擬機ubuntu怎么聯網

    與外部網絡通信。本文將詳細介紹虛擬機Ubuntu的網絡連接方法以及一些常見的網絡問題解決辦法。 一、虛擬機網絡概述 虛擬機的網絡連接有多種方式,包括橋接模式(Bridge)、NAT模式
    的頭像 發表于 12-27 16:51 ?996次閱讀
    主站蜘蛛池模板: 果冻传媒在线播放 免费观看| 男女夜晚在爽视频免费观看| 青青青久久久| 99精品99| 热久久国产欧美一区二区精品| 99热最新网站| 色中色成人论坛| 精品精品国产yyy5857香蕉| 中文字幕亚洲乱码熟女在线| 欧美激情社区| 国产精品999| 在线观看精品视频看看播放| 日本久久久| 果冻传媒视频在线播放| 97国产蝌蚪视频在线观看| 日韩精品特黄毛片免费看| 黑人巨大两根一起挤进欧美| 99久久综合国产精品免费| 无码国产色欲XXXX视频| 久久久精品3d动漫一区二区三区| 99视频精品在线| 亚洲国产AV一区二区三区四区| 久久综合一个色综合网| 调教美丽的白丝袜麻麻视频| 亚洲欧美精品无码一区二在线 | 欧美久久综合性欧美| 丰满少妇67194视频| 野花韩国高清完整版在线| 欧美人妖12p| 精品国产品国语在线不卡| 成人国产在线不卡视频| 夜夜穞狠狠穞| 天天躁日日躁狠狠躁中文字幕老牛| 久久伊人电影| 国产综合在线视频| 国产99RE在线观看69热| 97精品国产亚洲AV超碰| 亚洲精品嫩草研究院久久| 日本护士喷水| 蜜芽国产在线精品欧美| 久99久热只有精品国产99|