hotspot/src/share/vm/opto/graphKit.cpp
void GraphKit::post_barrier(Node* ctl,
Node* store,
Node* obj,
Node* adr,
uint adr_idx,
Node* val,
BasicType bt,
bool use_precise) {
{- -------------------------------------------
(1) barrier set の種別 (= GC アルゴリズムの種別) に応じて, 以下の3種類のケースが実装されている.
* G1GC の場合 (BarrierSet::G1SATBCT または BarrierSet::G1SATBCTLogging の場合)
GraphKit::g1_write_barrier_post() を呼び出す
* G1GC 以外の場合 (BarrierSet::CardTableModRef または BarrierSet::CardTableExtension の場合)
GraphKit::write_barrier_post() を呼び出す
* ?? の場合 (BarrierSet::ModRef) #TODO
何もしない
(なお, 正確には上記以外の場合 (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_post(store, obj, adr, adr_idx, val, bt, use_precise);
break;
case BarrierSet::CardTableModRef:
case BarrierSet::CardTableExtension:
write_barrier_post(store, obj, adr, adr_idx, val, use_precise);
break;
case BarrierSet::ModRef:
break;
case BarrierSet::Other:
default :
ShouldNotReachHere();
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.