hotspot/src/share/vm/gc_implementation/g1/g1CollectedHeap.cpp
void G1CollectedHeap::iterate_dirty_card_closure(CardTableEntryClosure* cl,
DirtyCardQueue* into_cset_dcq,
bool concurrent,
int worker_i) {
{- -------------------------------------------
(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.