工作中,很多时候我们只是为了完成任务而编码...缺少思考的时间...下面谈谈几个优化...虽然很基础,但是很实用.....
嵌套for循环...说到循环,大家一定没少用...但是有时候就是因为一行代码的顺序直接影响整个方法的响应时间...
- long stratTime = System.nanoTime();
- for (int i = 0; i < 10000000; i++) {
- for (int j = 0; j < 10; j++) {
- system.out.println("那你很棒棒哦!!!")
- }
- }
- long endTime = System.nanoTime();
- System.out.println("总耗时:"+ (endTime - stratTime));
- 输出结果: 总耗时:4573255
- 改成 :
- long stratTime = System.nanoTime();
for (int i = 0; i <10 ; i++) {
for (int j = 0; j < 10000000; j++) {
system.out.println("那你很棒棒哦!!!")
}
}
long endTime = System.nanoTime();
System.out.println("总耗时:"+(endTime - stratTime)); - 输出结果: 总耗时:12840246
- 由以上对比可知,优化后性能提升了一倍,嵌套循环应该遵循“外小内大”的原则,这就好比你复制很多个小文件和复制几个大文件的区别。
l循环list,想必用的最多,但是可能因为习惯性的i<list.size(),导致性能下降了一半...
例如:
- List<?> list = xxx.findByxxx();
- for (int i = 0; i < list.size(); i++) {
- //处理业务逻辑......
- }
- for每执行一次,list.size()都会执行一次,这无疑会大大降低系统性能...如果改成:
- int listSize = list.size();
- for(int i = 0 ; i<listSize;i++){
- //业务逻辑...
- }
- 性能提升至少三分之一...
异常处理...
for内部捕获...
- long stratTime = System.nanoTime();
- for (int i = 0; i < 10000000; i++) {
- try {
- } catch (Exception e) {
- }
- }
- long endTime = System.nanoTime();
- System.out.println("在内部捕获异常耗时:"+(endTime - stratTime));
for外部捕获...
- long stratTime = System.nanoTime();
- try {
- for (int i = 0; i < 10000000; i++) {
- }
- } catch (Exception e) {
- }
- long endTime = System.nanoTime();
- System.out.println("在外部捕获异常耗时:"+(endTime - stratTime));
-
- 在内部捕获异常耗时:12150142
- 在外部捕获异常耗时:1955
- 捕获异常是很耗资源的,所以不要把try catch放到循环内部,优化后性能,响应速度提升数倍...