Java EE应用程序中的System.out.println危害

6

当我开始学习Java时,有人告诉我不要在Java EE应用程序中使用System.out.println。然而,我真的不知道为什么不能这样做。

我完全意识到,如果我们确实需要打印重要信息,应该使用日志框架进行记录。

我真正想问的是:使用System.out.println会造成任何真正的危害吗?它会导致任何性能问题吗?

3个回答

7
这里确实存在性能问题。如果你深入研究JDK源代码中的System.out,你最终会遇到一个针对输出流的synchronized块。
这意味着,如果您在源代码中放置了足够的println调用,整个代码库将有效地以单线程运行,因为所有线程都在等待同步锁定。
这里涉及一些统计数据,一次println调用通常不会导致整个应用程序变慢。但是在您的代码中使用更多的println调用,就越有可能导致两个或更多线程需要彼此等待。

3
在任何Java EE应用程序中,可能有多个应用程序在同一个JVM中运行。只有一个System.out。如果几个应用程序同时尝试写入System.out,它可能会导致输出内容争用,并可能在理论上影响性能。
此外,虽然与性能无关,但输出非常混乱且难以阅读 - 特别是如果多个应用程序同时编写输出,而没有指示输出来自哪个应用程序。 (即使在同一个应用程序内部也是如此,存在多个并发请求。)
正如您提到的,使用适当的日志记录框架将消除这两个问题。

0

还有一点,无论使用sysout写了什么,在运行时都会存在,您无法控制它,它将始终打印。通过使用日志框架,您可以打开/关闭日志记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接