通常初学者在项目调试中喜欢使用 System.out.println() 来打印结果或者作为日志记录,然后将代码提交到远程仓库中,这是一个非常不好的操作,应该被禁止。
很多人觉得执行一句 System.out.println(),没什么大不了的,耗不了多少时间,但是在高并发的情况,即使是一点点性能的浪费都是值得重视。
我们通过一个简单的例子来验证下:
耗时结果输出如下
耗时:278ms
耗时:0ms
执行10万次 System.out.println() 耗时 278 ms,而没有执行耗时几乎为0ms。
发现里面是加了锁的,println() 方法是一个同步的方法,在高并发情况下很影响性能。
初次之外 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() 打印结果并不会记录到日志文件中,也是不是有其的一个原因。
2022年02月17日 09:56:00
讲道理你这例子和你说的一点关系都没有
2021年10月12日 15:12:14
1