Top


定義場所(file name)

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

名前(function name)

void GraphKit::post_barrier(Node* ctl,
                            Node* store,
                            Node* obj,
                            Node* adr,
                            uint  adr_idx,
                            Node* val,
                            BasicType bt,
                            bool use_precise) {

本体部(body)

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