G1 中的記憶體分割槽引用 RSet

2021-10-06 08:00:38 字數 1038 閱讀 5753

在g1**物件時,會根據分割槽之間的引用關係快速定位到引用者

比如乙個老生代分割槽有乙個新生區的物件引用了,即

young.field = old;
則old物件對應的rset中會標記young所在分割槽的位置

找到分割槽後再尋找分區內引用old物件的young物件

管理引用通過add_reference函式

void otherregionstable::add_reference(oo****arrowoopstar from, int tid) 

heapregion* from_hr = _g1h->heap_region_containing_raw(from);

regionidx_t from_hrm_ind = (regionidx_t) from_hr->hrm_index();

if (_coarse_map.at(from_hrm_ind))

//新增prt引用關係到rset中

size_t ind = from_hrm_ind & _mod_max_fine_entries_mask;

perregiontable* prt = find_region_table(ind, from_hr);//rset

if (prt == null) else

perregiontable* first_prt = _fine_grain_regions[ind];

prt->set_collision_list_next(first_prt);

_fine_grain_regions[ind] = prt;

_n_fine_entries++;

//稀疏矩陣的資料新增至prt卡表

//...

}} prt->add_reference(from);

}

rset記錄引用者的位址,但實際上可以有幾種選擇

bitmap記錄分割槽,稀疏矩陣記錄位址,prt記錄heapregion其實位址加上對應的分割槽引用位圖

Linux中記憶體(4G)的劃分區域

32 位的windows作業系統上,記憶體的劃分比例是 2 2 使用者空間 記憶體空間 而在linux上是以 3 1的比例劃分的。那麼,linux上使用者空間和核心空間具體又是怎麼劃分的呢?下面我們來簡單介紹以下 4g 位址空間的範圍是0x0000 0000 0xffff ffff,其中0xc000...

C 中的記憶體分割槽模型

一 概述 在c 程式中,一般會將程式的內容按型別分別儲存在四個區域內。這四個區域分別是 全域性資料區 區 堆區和棧區.各區域儲存的資料型別和特點 全域性資料區 由作業系統進行管理,用於存放全域性變數 全域性常量 字串常量以及靜態變數。區 由作業系統進行管理,用於存放各種函式體的二進位制 棧區 由編譯...

計算機記憶體中的分割槽

c語言中乙個簡單的指標練習題 include void main void copy string char from,char to to 0 功能是將字串a拷貝到字串b中去。編譯鏈結都ok,執行報錯。提示非法訪問。下面直接貼內容 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 ...