hotspot/src/share/vm/gc_implementation/parallelScavenge/psScavenge.cpp
template <class T> void do_oop_work(T* p) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert (!oopDesc::is_null(*p), "expected non-null ref");
assert ((oopDesc::load_decode_heap_oop_not_null(p))->is_oop(),
"expected an oop while scanning weak refs");
{- -------------------------------------------
(1) PSScavenge::copy_and_push_safe_barrier() を呼び出す.
(ただし, ポインタが NULL だったり New 領域内を指してない場合には何もしない.
(See: PSScavenge::should_scavenge))
---------------------------------------- -}
// Weak refs may be visited more than once.
if (PSScavenge::should_scavenge(p, _to_space)) {
PSScavenge::copy_and_push_safe_barrier(_promotion_manager, p);
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.