最近、デバッグ情報の一部/すべてなしでコンパイルする Java ライブラリ (JDK、joda time、iText) がいくつかあることに気付きました。ローカル変数情報が欠落しているか、ローカル変数情報と行番号の両方が欠落しています。
これには何か理由がありますか?コンパイルされたコードが大きくなることはわかっていますが、それが特に大きな考慮事項であるとは思いません。それとも、デフォルトのコンパイル オプションでビルドしているだけですか?
ありがとう。
最近、デバッグ情報の一部/すべてなしでコンパイルする Java ライブラリ (JDK、joda time、iText) がいくつかあることに気付きました。ローカル変数情報が欠落しているか、ローカル変数情報と行番号の両方が欠落しています。
これには何か理由がありますか?コンパイルされたコードが大きくなることはわかっていますが、それが特に大きな考慮事項であるとは思いません。それとも、デフォルトのコンパイル オプションでビルドしているだけですか?
ありがとう。
デフォルトのコンパイル オプションにはデバッグ情報が含まれていないため、コンパイラにデバッグ情報を含めるように明示的に指示する必要があります。ほとんどの人がそれを省略する理由はいくつかあります。
[編集] John が指摘したように、Java バイトコードは今日では (あまり) 最適化されていません。そのため、クラス ファイルの出力はどちらの場合も同じになります (デバッグ情報を含むクラス ファイルのみが大きくなります)。コードは実行時に JIT で最適化され、実行時に CPU、メモリ (量とレイアウト) などのコードを最適化できます。
前述の 5% のペナルティは、コードを実行し、コマンド ライン オプションを追加して、リモート デバッガーがプロセスにアタッチできるようにする場合です。リモート デバッグを有効にしない場合、ペナルティはありません (クラスの読み込みを除きますが、それは 1 回だけです)。
おそらくインストールのサイズ。デバッグ情報は、Sunがおそらく気に入らなかったjarファイルにオーバーヘッドを追加します。
最近、Java Web Startの問題を調査する必要がありました(デバッグ情報はありません)。そのため、Javaコンソールに完全なトレースを追加してソースコードをダウンロードすることは役に立ちましたが、コードがかなり絡み合っているため、デバッグビルドが必要です。
JDKは、あらゆる場所で完全なデバッグ情報を使用してコンパイルする必要があります。