Top


定義場所(file name)

hotspot/src/share/vm/opto/graphKit.cpp

名前(function name)

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) {

本体部(body)

  {- -------------------------------------------
  (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.