Java VMを起動する際のオプション“-XX:+JavaMonitorsInStackTrace”の「-XX」、および、それに指定されている「+JavaMonitorsInStackTrace」の意味について教えてください。

Java VMを起動する際のオプション“-XX:+JavaMonitorsInStackTrace”の「-XX」、および、それに指定されている「+JavaMonitorsInStackTrace」の意味について教えてください。
「-XX」で開始されるjavaのオプションは、JDK 1.3.0以降でサポートされているJava VM(HotSpot VM)用のオプションです。将来に渡ってサポートされる保証がないため、一般に公開されていません。
-XX:+JavaMonitorsInStackTraceは、JDK 1.3系でJavaのスレッド情報にオブジェクトの占有、解放待ちを示す情報を付加させるオプションです。
例えば、通常のjavaコマンド実行では、フルスレッドダンプのスタックトレースが、

"Thread-1" prio=1 tid=0x80bbea0 nid=0x68f1 waiting for monitor entry [0xbe7ff000..0xbe7ff8c0]
  at TestA.method_a2(Test.java:14)
  at TestB.method_b1(Test.java:23)
  at Thread2.run(Test.java:54)

  

のようになりますが、-XX:+JavaMonitorsInStackTraceを付加して実行することにより、


"Thread-1" prio=1 tid=0x80bbea0 nid=0x68f1 waiting for monitor entry [0xbe7ff000..0xbe7ff8c0]
  at TestA.method_a2(Test.java:14)
  - waiting to lock <436aad90> (a TestA)
  at TestB.method_b1(Test.java:23)
  - locked <436ab978> (a TestB)
  at Thread2.run(Test.java:54)

  
のように、オブジェクトの占有(locked)、解放待ち(waiting to lock)の情報が出ます。これを他のスレッドと照合して、Javaアプリレベルのデッドロック検出が可能となります。
なお、-XX:+JavaMonitorsInStackTraceはJDK 1.3系で有効であり、JDK 1.2.2ではこのオプションは受け入れられません。JDK 1.2.2ではスレッドダンプの形式が異なるものの、対応する情報はデフォルトで出力されているため、このオプションは指定しないでください。
また、JDK 1.4系では、-XX:+JavaMonitorsInStackTraceはデフォルトとなっていますので、指定する必要はありません。したがって、JDK 1.3系に閉じて指定してください。

製品・サービス区分 Interstage
製品・サービス情報
対象製品 Interstage Application Server
バージョン V8, V7, V6, V5, V4, V3
プラットフォーム Windows, Solaris, Linux
アンサー種別 共通
このページの先頭へ