在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個區,他們分別是堆 棧 自由儲存區 全域性 ...