hotspot/src/share/vm/runtime/sharedRuntime.cpp
// G1 write-barrier pre: executed before a pointer store.
JRT_LEAF(void, SharedRuntime::g1_wb_pre(oopDesc* orig, JavaThread *thread))
{- -------------------------------------------
(1) もし書き換え前の値(= orig 引数の値)が NULL であれば,
記録する価値はないので, ここでリターン.
(assert にもあるように, 本来はここに来る前にチェックされている条件だが, 念のためここでもチェックしている模様)
---------------------------------------- -}
if (orig == NULL) {
assert(false, "should be optimized out");
return;
}
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(orig->is_oop(true /* ignore mark word */), "Error");
{- -------------------------------------------
(1) PtrQueue::enqueue() を呼んで,
書き換え前の値(= orig 引数の値)をキューに追加する.
---------------------------------------- -}
// store the original value that was in the field reference
thread->satb_mark_queue().enqueue(orig);
JRT_END
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.