hotspot/src/share/vm/memory/referenceProcessor.cpp
void ReferenceProcessor::process_phaseJNI(BoolObjectClosure* is_alive,
OopClosure* keep_alive,
VoidClosure* complete_gc) {
{- -------------------------------------------
(1) (トレース出力)
---------------------------------------- -}
#ifndef PRODUCT
if (PrintGCDetails && PrintReferenceGC) {
unsigned int count = count_jni_refs();
gclog_or_tty->print(", %u refs", count);
}
#endif
{- -------------------------------------------
(1) Weak global JNI references (のうちで生きているもの) に対して,
keep_alive 引数で渡された Closure を適用する.
---------------------------------------- -}
JNIHandles::weak_oops_do(is_alive, keep_alive);
{- -------------------------------------------
(1) 番兵(_sentinelRef)用のオブジェクトについても
keep_alive 引数で渡された Closure を適用しておく.
---------------------------------------- -}
// Finally remember to keep sentinel around
keep_alive->do_oop(adr_sentinel_ref());
{- -------------------------------------------
(1) complete_gc 引数で渡された VoidClosure を用いて,
以上の処理で mark を付けられたオブジェクトから再帰的に辿れる範囲全てにも mark を付ける
(= 再帰的な到達範囲全てを live にする).
---------------------------------------- -}
complete_gc->do_void();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.