hotspot/src/share/vm/services/threadService.cpp
void ConcurrentLocksDump::dump_at_safepoint() {
{- -------------------------------------------
(1) (この関数では, 現在ロックされているシンクロナイザの一覧を取得する)
---------------------------------------- -}
// dump all locked concurrent locks
{- -------------------------------------------
(1) (assert)
---------------------------------------- -}
assert(SafepointSynchronize::is_at_safepoint(), "all threads are stopped");
{- -------------------------------------------
(1) (JDK のバージョンが 1.6 未満の場合には, 何もすることはない)
---------------------------------------- -}
if (JDK_Version::is_gte_jdk16x_version()) {
{- -------------------------------------------
(1) (変数宣言など)
---------------------------------------- -}
ResourceMark rm;
{- -------------------------------------------
(1) HeapInspection::find_instances_at_safepoint() で,
ヒープ中に存在する全ての java.util.concurrent.locks.AbstractOwnableSynchronizer オブジェクト
(やそのサブクラスのオブジェクト)を取得する.
---------------------------------------- -}
GrowableArray<oop>* aos_objects = new GrowableArray<oop>(INITIAL_ARRAY_SIZE);
// Find all instances of AbstractOwnableSynchronizer
HeapInspection::find_instances_at_safepoint(SystemDictionary::abstract_ownable_synchronizer_klass(),
aos_objects);
{- -------------------------------------------
(1) ConcurrentLocksDump::build_map() で,
取得した AbstractOwnableSynchronizer オブジェクトの情報を
そのオブジェクトのロックを確保しているスレッドに紐づける.
---------------------------------------- -}
// Build a map of thread to its owned AQS locks
build_map(aos_objects);
}
}
This document is available under the GNU GENERAL PUBLIC LICENSE Version 2.