スレッドセーフではないコード(3回目)

他人が書いたコードがマルチスレッド下で正しく動くかどうか検証するのは骨の折れる作業と実感する。

テスト時になるべくバグが出やすくするコツとしてClient VMではなくServer VMで動かすとよいそうだ。ServerVMの方がClientVMにくらべてより最適化しようとする。

Eclipseで実行する場合は下図のようにVM起動引数に-serverを指定する。

また、実際にServerVMで起動したことを確認するには、環境変数「_JAVA_LAUNCHER_DEBUG」を設定する。値は空白以外なら何でも良いようだ。

この状態で実行すると、実行後に以下のように情報が出力される。

----_JAVA_LAUNCHER_DEBUG----
(途中省略)
JVM path is C:\root\usr\local\pleiades-3.7.2\eclipse\jre\bin\server\jvm.dll
JRE path is C:\root\usr\local\pleiades-3.7.2\eclipse\jre
CRT path is C:\root\usr\local\pleiades-3.7.2\eclipse\jre\bin\msvcr71.dll
(途中省略)
----_JAVA_LAUNCHER_DEBUG----

sever\jvm.dll と出力されればServerVMで起動したことを確認できる。