場合によっては、Java コードが NullPointerException をキャッチしても StackTrace のログに失敗し、開発者は「 java.lang.NullPointerException" が表示されます。
この複雑な問題により、開発者はオンラインで解決策を探しても無駄になっています。しかし、さらなる調査により、根本原因は HotSpot JVM の最適化戦略にあることが判明しました。
この最適化に対抗して StackTrace の取得を復元するには、開発者は次の引数を JVM に渡す必要があります。
-XX:-OmitStackTraceInFastThrow
この最適化は、JVM による NullPointerExceptions などの反復的な例外の処理から生じます。最初の発生時に、JVM は完全な StackTrace をログに記録します。ただし、頻繁に発生する場合、JVM はパフォーマンス上の理由と過剰なログ エントリを避けるために StackTrace ログを抑制します。
この実装の詳細な説明は、HotSpot JVM ソース コード、具体的には「graphKit. cpp」ファイル。 OmitStackTraceInFastThrow 変数を調整することで、開発者はスタック トレースの可視性を取り戻し、デバッグ プロセスを容易にすることができます。
以上がJava NullPointerException に StackTrace がないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。