Top


定義場所(file name)

hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp

名前(function name)

void G1CollectedHeap::iterate_dirty_card_closure(CardTableEntryClosure* cl,
                                                 DirtyCardQueue* into_cset_dcq,
                                                 bool concurrent,
                                                 int worker_i) {

本体部(body)

  {- -------------------------------------------
  (1) 
      ---------------------------------------- -}

      // Clean cards in the hot card cache
      concurrent_g1_refine()->clean_up_cache(worker_i, g1_rem_set(), into_cset_dcq);

  {- -------------------------------------------
  (1) (変数宣言など)

      (JavaThread::dirty_card_queue_set() は 
      JavaThread::_dirty_card_queue_set という static フィールドを返す.
      これは, RS log を集めておくためのもの (filled RS buffers).

      通常時には, JavaThread は _dirty_card_queue という Thread Local な DirtyCardQueue に RS log 情報を蓄え, 
      一杯になったらこの static なキューに詰め込む模様?? #TODO)
      ---------------------------------------- -}

      DirtyCardQueueSet& dcqs = JavaThread::dirty_card_queue_set();
      int n_completed_buffers = 0;

  {- -------------------------------------------
  (1) 
      ---------------------------------------- -}

      while (dcqs.apply_closure_to_completed_buffer(cl, worker_i, 0, true)) {
        n_completed_buffers++;
      }
      g1_policy()->record_update_rs_processed_buffers(worker_i,
                                                      (double) n_completed_buffers);
      dcqs.clear_n_completed_buffers();

  {- -------------------------------------------
  (1) (assert)
      ---------------------------------------- -}

      assert(!dcqs.completed_buffers_exist_dirty(), "Completed buffers exist!");
    }

This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.