JavaでJVMTIを使ってデッドロックを動的に検出できるかどうか疑問に思っています。同期ステートメントを使用したモニターでのアクションを示す 2 つのイベントがあります。
モニター競合エンター
スレッドが、別のスレッドによってすでに取得されている Java プログラミング言語モニターに入ろうとしたときに送信されます。
モニターの競合が入力されました
別のスレッドによって解放されるのを待った後、スレッドが Java プログラミング言語モニターに入ったときに送信されます。
つまり、JVMTI では、すでにロックされているモニターしか見ることができません。待機グラフを再構築したかったのですが、どのスレッドにも保持されていないロックが取得されたことを示すイベントがありませんでした。不可能だよ。
代替手段はありますか?Unix の SIGQUIT コマンドは、デッドロックを表示するスレッド ダンプを許可しますが、これは JVMTI 内では不可能のようです。