1. ホーム
  2. java

[解決済み] JavaでのNullPointerException(StackTraceなし

2022-03-26 02:51:06

質問

当社のJavaコードのインスタンスに NullPointerException しかし、スタックトレースを記録しようとすると(基本的にこれは Throwable.printStackTrace() ) が得られるだけです。

java.lang.NullPointerException

このようなことに遭遇された方はいらっしゃいますか?私は "java null pointer empty stack trace" でググってみましたが、このようなものには出会えませんでした。

解決方法は?

おそらくHotSpot JVM(元はSun Microsystems、後にOracleに買収され、OpenJDKの一部)を使用していると思いますが、これは多くの最適化を実行するものです。スタック・トレースを取り戻すには、オプションとして -XX:-OmitStackTraceInFastThrow をJVMに送信します。

最適化は、例外(典型的にはNullPointerException)が初めて発生したとき、完全なスタックトレースが印刷され、JVMはスタックトレース(あるいはコードの場所だけ)を記憶します。その例外が十分に頻繁に発生するとき、スタック・トレースは、より良いパフォーマンスを達成し、同一のスタック・トレースでログをあふれさせないために、もう印刷されない。

HotSpot JVMでどのように実装されているかを見るには。 コピーを取る を検索し、グローバル変数 OmitStackTraceInFastThrow . 前回(2019年)、私がこのコードを見たときは、ファイルに GraphKit.cpp .