hotspot/src/share/vm/runtime/safepoint.cpp
// Various cleaning tasks that should be done periodically at safepoints
void SafepointSynchronize::do_cleanup_tasks() {
{- -------------------------------------------
(1) ObjectSynchronizer::deflate_idle_monitors() を呼んで,
不要になった ObjectMonitor オブジェクトを回収する.
(なお, ここで回収されるのは以下の条件を満たす ObjectMonitor.
* ロックを取られていない
* ロック待ちのスレッドもいない
* notifyを待っているスレッドもいない)
(ついでに(トレース出力)も出している)
---------------------------------------- -}
{
TraceTime t1("deflating idle monitors", TraceSafepointCleanupTime);
ObjectSynchronizer::deflate_idle_monitors();
}
{- -------------------------------------------
(1)
(ついでに(トレース出力)も出している)
---------------------------------------- -}
{
TraceTime t2("updating inline caches", TraceSafepointCleanupTime);
InlineCacheBuffer::update_inline_caches();
}
{- -------------------------------------------
(1) CompilationPolicy::do_safepoint_work() を呼び出して
(より正確に言うと, それを各サブクラスがオーバーライドしたものを呼び出して),
CompilationPolicy 関係の safepoint 時処理を行っておく.
(<= といっても現状では NonTieredCompPolicy 以外では何もしない.
NonTieredCompPolicy の場合には, InvocationCounter の値を半減させていく処理が行われる.
(See: NonTieredCompPolicy::do_safepoint_work()))
(ついでに(トレース出力)も出している)
---------------------------------------- -}
{
TraceTime t3("compilation policy safepoint handler", TraceSafepointCleanupTime);
CompilationPolicy::policy()->do_safepoint_work();
}
{- -------------------------------------------
(1) NMethodSweeper::scan_stacks() を呼んで,
不要になった JIT 生成コード(nmethod)の回収処理を行う
(See: NMethodSweeper).
(ついでに(トレース出力)も出している)
---------------------------------------- -}
TraceTime t4("sweeping nmethods", TraceSafepointCleanupTime);
NMethodSweeper::scan_stacks();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.