慎用 System.out.println()

avatar 2020年2月16日16:56:03 评论 137 views

通常初学者在项目调试中喜欢使用 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() 打印结果并不会记录到日志文件中,也是不是有其的一个原因。

 

 

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: