hotspot/src/share/vm/runtime/biasedLocking.cpp
void BiasedLocking::revoke_at_safepoint(Handle h_obj) {
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(SafepointSynchronize::is_at_safepoint(), "must only be called while at safepoint");
{- -------------------------------------------
(1) まず update_heuristics() を呼んで, heuristics 情報を更新し, どうすべきかを決める.
---------------------------------------- -}
oop obj = h_obj();
HeuristicsResult heuristics = update_heuristics(obj, false);
{- -------------------------------------------
(1) heuristics の結果が HR_SINGLE_REVOKE であれば, revoke_bias() で対象のオブジェクトを revoke させる.
---------------------------------------- -}
if (heuristics == HR_SINGLE_REVOKE) {
revoke_bias(obj, false, false, NULL);
{- -------------------------------------------
(1) heuristics の結果が HR_BULK_REBIAS か HR_BULK_REVOKE であれば,
bulk_revoke_or_rebias_at_safepoint() で bulk revoke または bulk rebias を起こす.
---------------------------------------- -}
} else if ((heuristics == HR_BULK_REBIAS) ||
(heuristics == HR_BULK_REVOKE)) {
bulk_revoke_or_rebias_at_safepoint(obj, (heuristics == HR_BULK_REBIAS), false, NULL);
}
{- -------------------------------------------
(1) キャッシュしていた情報はもう使えないので,
clean_up_cached_monitor_info() を呼び出して
各 JavaThread 内にキャッシュしておいた「使用中のロック情報」を全部消しておく.
(このキャッシュ情報は get_or_compute_monitor_info() 内で(のみ)参照されている.
See: JavaThread::cached_monitor_info())
---------------------------------------- -}
clean_up_cached_monitor_info();
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.