其他分享
首页 > 其他分享> > 都 9102 了,你还不知道 System.out.println 的危害!

都 9102 了,你还不知道 System.out.println 的危害!

作者:互联网

最近需要改一个老项目,项目代码非常的多,完全称得上是“大而全”。


老项目里面的代码,经过几代人的编写,非常难以读懂,而且出处是 System.out.println(),今天我抽个时间给大家说一说,为什么大多数人都被告知不要在 Java 应用中使用 System.out.println!


图片

1、第一个原因就是它不能实现日志按等级输出。具体来说就是不能和日志框架一样,有 debug,info,error 等级别的控制。


2、它的输出,你不太容易从日志当中快速的跟踪到代码。包括它无法输出具体的类名,方法名,具体代码行数等。


3、第三个原因就是,它的性能太差。


图片

你通过这个 synchronized 关键字,你就会发现,如果项目中大量的使用了 System.out.println,最终会导致整个代码调用成了“串行”输出。


有时候不是你的 JVM 没优化好,二是你写的代码就像再打草稿!


感兴趣的网友,可以针对 System.out.println 做一个压力测试,看看它的性能报告。


System.out.println 性能并不好。当我们深入分析时,其调用顺序如下 println - > print - > write()+ newLine()。所以,一些公司在 OpenJDK 的基础上就完全的把它禁用掉,或者换成其他的实现。


System.out.println VS 日志记录组件


这里以 Log4J 为例,Log4J 具有多种记录级别。如果我们正在编写一个小程序,只是为了实验/学习目的那么使用 System.out.println 就很不错。但当我们开发生产质量软件时,我们应该注意到应该使用记录组件(log4j等),并且应该避免使用 System.out.println。为什么?



所以我们不应该使用 System.out.println 进行日志记录和调试(logging and debugging)。


标签:代码,9102,System,println,日志,log4j,out
来源: https://blog.51cto.com/u_15127568/2713352