慎用 System.out.println()打印-775源码屋

通常初学者在项目调试中喜欢使用 System.out.println() 来打印结果或者作为日志记录,然后将代码提交到远程仓库中,这是一个非常不好的操作,应该被禁止。

很多人觉得执行一句 System.out.println(),没什么大不了的,耗不了多少时间,但是在高并发的情况,即使是一点点性能的浪费都是值得重视。

我们通过一个简单的例子来验证下:

public static void main(String[] args) {
// 计算执行十万次 System.out.println()
long startTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) { System.out.println(i); } System.out.println("耗时:" + (System.currentTimeMillis() - startTime) + "ms"); // 对照实验,计算执行十万次空循环 long startTime2 = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { } System.out.println("耗时:" + (System.currentTimeMillis() - startTime2) + "ms"); }

耗时结果输出如下

耗时:278ms
耗时:0ms

执行10万次 System.out.println() 耗时 278 ms,而没有执行耗时几乎为0ms。

原因

我们查看 println 的源码

public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}

发现里面是加了锁的,println() 方法是一个同步的方法,在高并发情况下很影响性能。

补充

所以建议在企业级项目代码中建议删除非必要的 System.out.println() 方法,用 log4j 或 logback 等日志工具来打印。另外,日志打印可以做成异步操作。

初次之外 System.out.println() 打印结果并不会记录到日志文件中,也是不是有其的一个原因。

0
分享到:

评论0

请先

没有账号? 忘记密码?