hotspot/src/share/vm/oops/oop.pcgc.inline.hpp
inline void oopDesc::update_contents(ParCompactionManager* cm) {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
// The klass field must be updated before anything else
// can be done.
DEBUG_ONLY(klassOopDesc* original_klass = klass());
{- -------------------------------------------
(1) もし GC によって対応する KlassOop の位置が移動している場合
(= PSParallelCompact::should_update_klass() が true の場合) には,
oopDesc::update_header() で KlassOop を指すポインタを修正しておく.
---------------------------------------- -}
// Can the option to update and/or copy be moved up in the
// call chain to avoid calling into here?
if (PSParallelCompact::should_update_klass(klass())) {
update_header();
assert(klass()->is_klass(), "Not updated correctly");
} else {
assert(klass()->is_klass(), "Not updated");
}
{- -------------------------------------------
(1) 対応する Klass オブジェクトの Klass::oop_update_pointers() を呼び出す.
(ただし, プリミティブ型の配列(typeArrayKlass)の場合には, (ポインタを含んでいなくてすることがないので) この処理は省略)
---------------------------------------- -}
Klass* new_klass = blueprint();
if (!new_klass->oop_is_typeArray()) {
// It might contain oops beyond the header, so take the virtual call.
new_klass->oop_update_pointers(cm, this);
}
// Else skip it. The typeArrayKlass in the header never needs scavenging.
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.