JAVA:例外のスタックトレースが表示されない

JAVAにおいて、NullException等の一部の例外で、スタックトレースが表示されない事象が発生した。

環境:Java 1.6.0

<解決法>

Javaの実行時コマンドにて、-XX:-OmitStackTraceInFastThrowを指定する。

<解説>

HotSpotVMで組み込み例外が繰り返し発生するような状態では、実行を最適化する仕組みが働く。

その過程において、スタックトレースの情報が切り捨てられる。

今回のプログラムでは、try-catchを複数ネストする構造にしており、繰り返しthrowすることで、上記に該当したと思われる。

<参照>

http://www.oracle.com/technetwork/java/javase/relnotes-139183.html

<原文>

The compiler in the server VM now provides correct stack backtraces for all “cold” built-in exceptions. For performance purposes, when such an exception is thrown a few times, the method may be recompiled. After recompilation, the compiler may choose a faster tactic using preallocated exceptions that do not provide a stack trace. To disable completely the use of preallocated exceptions, use this new flag: -XX:-OmitStackTraceInFastThrow.