慎用 System.out.println()

avatar 2020年02月16日16:56:03 8 6041 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
  • 编程爱好者交流群
  • 资源分享,问题解决,技术交流。QQ群:424285828(新群)
  • weinxin
avatar

发表评论

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

  

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

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

  2. avatar camile

    1