慎用 System.out.println()

avatar 2020年02月16日16:56:03 8 5944 views
博主分享免费Java教学视频,B站账号:Java刘哥
通常初学者在项目调试中喜欢使用 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

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:2   待审核评论数:0
  1. avatar 哈哈哈哈

    讲道理你这例子和你说的一点关系都没有

  2. avatar camile

    1