hotspot/src/share/vm/opto/graphKit.cpp
void GraphKit::pre_barrier(bool do_load,
Node* ctl,
Node* obj,
Node* adr,
uint adr_idx,
Node* val,
const TypeOopPtr* val_type,
Node* pre_val,
BasicType bt) {
{- -------------------------------------------
(1) barrier set の種別 (= GC アルゴリズムの種別) に応じて, 以下の3種類のケースが実装されている.
* G1GC の場合 (BarrierSet::G1SATBCT または BarrierSet::G1SATBCTLogging の場合)
GraphKit::g1_write_barrier_pre() を呼び出す
* G1GC 以外の場合 (BarrierSet::CardTableModRef, BarrierSet::CardTableExtension, または BarrierSet::ModRef の場合)
何もしない
(なお, 正確には上記以外の場合 (BarrierSet::Other, またはそれ以外) というパスも書かれているが,
Should_Not_Reach_Here() になるだけ.)
---------------------------------------- -}
BarrierSet* bs = Universe::heap()->barrier_set();
set_control(ctl);
switch (bs->kind()) {
case BarrierSet::G1SATBCT:
case BarrierSet::G1SATBCTLogging:
g1_write_barrier_pre(do_load, obj, adr, adr_idx, val, val_type, pre_val, bt);
break;
case BarrierSet::CardTableModRef:
case BarrierSet::CardTableExtension:
case BarrierSet::ModRef:
break;
case BarrierSet::Other:
default :
ShouldNotReachHere();
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.