hotspot/src/share/vm/services/threadService.cpp
// build a map of JavaThread to all its owned AbstractOwnableSynchronizer
void ConcurrentLocksDump::build_map(GrowableArray<oop>* aos_objects) {
{- -------------------------------------------
(1) (引数として java.util.concurrent.locks.AbstractOwnableSynchronizer オブジェクトの配列が渡される)
この配列内を全て辿り,
java_util_concurrent_locks_AbstractOwnableSynchronizer::get_owner_threadObj() で
ロックを確保されているかどうか調べていく.
ロックを確保されている AbstractOwnableSynchronizer オブジェクトについては,
ConcurrentLocksDump::add_lock() で確保主のスレッドと紐づける.
---------------------------------------- -}
int length = aos_objects->length();
for (int i = 0; i < length; i++) {
oop o = aos_objects->at(i);
oop owner_thread_obj = java_util_concurrent_locks_AbstractOwnableSynchronizer::get_owner_threadObj(o);
if (owner_thread_obj != NULL) {
JavaThread* thread = java_lang_Thread::thread(owner_thread_obj);
assert(o->is_instance(), "Must be an instanceOop");
add_lock(thread, (instanceOop) o);
}
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.