web-dev-qa-db-ja.com

Javacデバッグのオンとオフの間にパフォーマンスの違いはありますか?

Javacでデバッグ情報の生成をオンに切り替えると、クラスファイルが20〜25%大きくなります。 Javaプログラムの実行にパフォーマンス上の影響がありますか?はいの場合、どの条件と数で実行されますか?ファイルが大きいため、クラスのロードに少し影響があると予想されますが、これは最小限でなければなりません。

60
Horcrux7

どの言語でも、デバッグ情報はメタ情報です。その性質上、オブジェクトファイルのサイズが大きくなるため、ロード時間が長くなります。デバッガーの外部での実行中、この情報は実際には完全に無視されます。 JVM仕様 に(明確ではありませんが)概説されているように、デバッグ情報はバイトコードストリームの外部に格納されます。つまり、実行時にクラスファイルに違いはありません。確かにしたいなら、試してみてください:-)。

Ps。多くの場合、デバッグでは、最適化をオフにすることの価値があります。それdoesはパフォーマンスに影響を与えます。

61
Paul de Vrieze

デバッグのみをオフにしても、違いはありません。ただし、デバッグをオフにして最適化をオンにすると、コンパイル時に静的な最適化が行われるため、違いがわかります。このようにして、ホットスポットに最適化されたコードでさえ、実行時に高速になります。

しかし、これまでのところ、完全なスタックトレースを取得することと、ユーザーパフォーマンスを向上させることのトレードオフとして、常にスタックトレースに投票しました。結局のところ、ユーザーはより高速なマシンを入手するために毎年1000ドルを費やすことをいとわないが、問題を解決するために意味のあるエラーメッセージを提供するために15分を費やすことを望んでいません。

数年後、私はユーザーの1000ドルよりも自分の15分の価値を高く評価するつもりです。 :)

14
Thomas Morgner

JDK1.3 javacは最適化フラグを無視するため、「コンパイル時の最適化は不要」であることに注意してください。

7
Maxim Veksler