网站首页 > java教程 正文
一般在Java开发的过程中或者调试bug的时候,很多人都会习惯性的使用System.out.println语句来输出到控制台中,来观察数据或逻辑是否正常。当开发或者调试完毕后,很可能就忘记删除,直接就发布到生产环境中去了。
代码感受下
public static void main(String[] args) {
long start1 = System.currentTimeMillis();
for(int i=0;i<100000;i++){
System.out.println("i:"+i);
}
long end1 = System.currentTimeMillis();
System.out.println("有System.out.println的耗时:"+(end1-start1));
long start2 = System.currentTimeMillis();
for(int i=0;i<100000;i++){
}
long end2 = System.currentTimeMillis();
System.out.println("无System.out.println的耗时:"+(end2-start2));
}
有System.out.println的耗时:408
无System.out.println的耗时:0
从控制台打印的结果我们可以看到,循环10w次的打印时间需要耗时408毫秒,没有打印的循环几乎等于0毫秒。
原理分析
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
从System.out.println的源代码中我们可以看到它在一开始就用synchronized同步锁给锁起来了,所以System.out.println是一个同步方法,在高并发的情况下,会严重影响性能。
总结
在日常开发或者调试的过程中,尽量使用log4j2或者logback这些异步的方法,进行日志的统一收集,禁止使用System.out.println。项目上线前也要进行全局搜索或者代码扫描,防止有人误提交带有System.out.println的代码,从而升级到生产环境而影响性能。
猜你喜欢
- 2024-12-16 java日常开发中如何写出优雅的好维护的代码
- 2024-12-16 如何使用JDBC操作数据库?一文带你吃透JDBC规范
- 2024-12-16 Ktlint让你写出统一规范的代码 linux命令history怎么调用历史
- 2024-12-16 这些让你目瞪口呆的 Java 代码技巧,真的太香了。
- 2024-12-16 9.零基础开发商城项目:项目结构和java编码命名规范
- 2024-12-16 宝藏开源推荐:Google Styleguide - 权威的代码规范
- 2024-12-16 DevOps + 代码规范/漏洞检测,让你更好地从Code Review中释放
- 2024-12-16 Java方法设计原则与实践:从Effective Java到团队案例
- 2024-12-16 j#java代码 java示例代码
- 2024-12-16 为什么阿里Java开发手册编码规范推荐单个方法的总行数不超过80行
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)