hotspot/src/share/vm/runtime/synchronizer.cpp
void ObjectSynchronizer::monitors_iterate(MonitorClosure* closure) {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
ObjectMonitor* block = gBlockList;
ObjectMonitor* mid;
{- -------------------------------------------
(1) 重量ロック状態になっている全てのオブジェクトに対して, 引数の OopClosure を適用する.
(See: ObjectMonitor)
(現在使用中の ObjectMonitor オブジェクトは gBlockList フィールドから始まるリストにつながれているので,
このリストを先頭から最後まで見て, (ObjectMonitor オブジェクトの object フィールドが NULL でないものについて)
MonitorClosure::do_monitor() を適用していくだけ.)
---------------------------------------- -}
while (block) {
assert(block->object() == CHAINMARKER, "must be a block header");
for (int i = _BLOCKSIZE - 1; i > 0; i--) {
mid = block + i;
oop object = (oop) mid->object();
if (object != NULL) {
closure->do_monitor(mid);
}
}
block = (ObjectMonitor*) block->FreeNext;
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.