2011-12-06 13 views
6

Javaの学習を開始したとき、Java EEアプリケーションでSystem.out.printlnを実行しないように言われました。しかし、私は本当にそうでない理由は何かを知りません。Java EEアプリケーションでのSystem.out.printlnの危険

本当に重要なものを印刷する必要がある場合は、ログフレームワークを使用して記録する必要があることを十分に認識しています。 のSystem.out.println作る任意の本当の危険があります:私は本当にここにお願いしたいと思いますどのような

?パフォーマンスに問題はありますか?

答えて

7

実際にはパフォーマンスの問題です。 System.outのJDKソースコードを調べると、最終的に出力ストリームにブロック​​が出現します。

つまり、ソースコードにprintln呼び出しを十分に置くと、すべてのスレッドが同期ロックを待機しているため、コードベース全体が効果的にシングルスレッドで実行されます。

統計情報がいくつかありますが、println を一度呼び出すと、一般にはアプリケーション全体をクロールすることはありません。あなたのコードでより多くのprintln呼び出しが行われるほど、2つ以上のスレッドが互いに待ち合わせる可能性が高くなります。

3

Java EEアプリケーション内では、複数のアプリケーションがすべて同じJVM内で実行されている可能性があります。 System.outは1つだけです。複数のアプリケーションが同時にSystem.outに書き込もうとすると、出力に競合が発生し、理論上パフォーマンスに影響を与える可能性があります。

また、必ずしもパフォーマンスに関係するわけではありませんが、出力が非常に乱雑で読みにくいことがあります。特に、複数のアプリケーションが同時に出力を書き出している場合は、 (同じアプリケーション内の複数の同時リクエストでも同じです。)

前述のとおり、適切なログフレームワークを使用すると、これらの問題は両方とも解消されます。

0

もう1つのポイントは、実行時にsysoutで書かれたものはすべてそこにあり、制御できないので、常に印刷されます。ロギングフレームワークを使用することで、ロギングをオン/オフすることができます。

関連する問題