hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.hpp
template <class T> void deal_with_reference(T* ref_to_scan) {
{- -------------------------------------------
(1) 処理対象に応じて以下のどちらかを呼び出す.
* 処理対象が, 処理が pending されているポインタ配列の場合:
G1ParScanPartialArrayClosure::do_oop_nv() (_partial_scan_cl フィールドに格納しているクロージャーを使用)
* それ以外の場合:
G1ParScanHeapEvacClosure::do_oop_nv() (_evac_cl フィールドに格納しているクロージャーを使用)
---------------------------------------- -}
if (has_partial_array_mask(ref_to_scan)) {
_partial_scan_cl->do_oop_nv(ref_to_scan);
} else {
// Note: we can use "raw" versions of "region_containing" because
// "obj_to_scan" is definitely in the heap, and is not in a
// humongous region.
HeapRegion* r = _g1h->heap_region_containing_raw(ref_to_scan);
_evac_cl->set_region(r);
_evac_cl->do_oop_nv(ref_to_scan);
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.