美文网首页
java代码优化总结

java代码优化总结

作者: AlanSun2 | 来源:发表于2019-05-10 11:14 被阅读0次

上次面试的时候,免面试官问我java代码优化,虽然平时在实际开发中也有注意这方面的问题,但当时就是没回来上来,都怪平时没注意总结,所以今天就在这里总结。这里我还要提醒下那些新手,想学好一门技能,总结非常重要。好记性不如烂笔头。好了废话不多说了。

1.尽量减少对变量的重复计算

使用带下标的for循环时,如下所示:
List<String> list = new ArrayList<>();
...
for(int i = 0; i < list.size(); i++) {
}

这种情况下,最好把对size的计算放到循环外,因为这样每次遍历都会计算一次,造成了不必要的浪费。改成如下:

List<String> list = new ArrayList<>();
...
int size;
for(int i = 0; i < size = list.size(); i++) {
}
获取方法参数的值时,对值的获取尽量只有一次(即,使用get()方法获取)。这样做后你的参数引用只有一个,维护更加方便。

2. 如果事先知道容器的容量,初始化时尽量指定它的初始容量(initialCapacity)

例如Map可以这样指定

Map<String, Object> map = new HashMap<>(2);

3. 计算时尽量使用位运算

例如对一个数乘/除一个偶数,如下:

int a = 5;
int b = a * 4;
int c = a / 4;

改为:

int a = 5;
int b = a << 2; //右移两位
int c = a >> 2;//左移两位

4. int转String,尽量使用String.valueOf();不要使用+ ""+ ""在底层会使用StringBuilderappend()方法,最后调用toString()。这里贴上javap后的源码:

    @Test
    public void test1() {
        int a = 5;
        String s = a + "";
    }

javap -c 后的源码:

  public void test1();
    Code:
       0: iconst_5
       1: istore_1
       2: new           #2                  // class java/lang/StringBuilder
       5: dup
       6: invokespecial #3                  // Method java/lang/StringBuilder."<init>":()V
       9: iload_1
      10: invokevirtual #4                  // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
      13: ldc           #5                  // String
      15: invokevirtual #6                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      18: invokevirtual #7                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      21: astore_2
      22: return

还是做了很多操作的。接下来我们看看String.valueOf()方法:

    @Test
    public void test1() {
        int a = 5;
        String s = String.valueOf(a);
    }

javap -c 后的源码:

  public void test1();
    Code:
       0: iconst_5
       1: istore_1
       2: iload_1
       3: invokestatic  #2                  // Method java/lang/String.valueOf:(I)Ljava/lang/String;
       6: astore_2
       7: return

不多说了,很明显的变化。

所以尽量使用String.valueOf()

5. 对变量的声明尽量放到条件语句内(尽量采用懒加载的策略,即在需要的时候才创建)

public void printB(int a){
  int b = 2;
  if (a == 1) {
    System.out.println(b);
  }
}

这时的System.out.println(b);a不等于1时,是不会被执行的,所以因该把b变量的声明放到条件内部,如下:

public void printB(int a){
  if (a == 1) {
    int b = 2;
    System.out.println(b);
  }
}

这个也很容易做到。

6. 使用equals比较时,常量尽量放在equals前,这样不容易出现NullPointException

7. 返回值位数组/列表时,没有值返回值,尽量不要返回null,而是返回空数组

这样做的好处就是,调用方法不需要先判断是否返回nul,代码更简洁,而且可以减少因为疏忽而引起的空指针异常。

8. 对流的尽量使用带资源的try

从jdk 1.7之后出现了带资源的try语句。只要实现了AutoCloseable接口,都可以使用带资源的try。这样做的好处就是,不需要再显示的调用close方法,也就不会出现因为忘记调用而引起的资源为释放。

9. 对变量的的声明放到循环外

10. 对字符串的操作使用StringBuilder/StringBuffer(线程安全)

例如字符串的连接,不要使用 + "" +,使用加号连接,底层使用的是StringBuilder,每使用一次加号连接赋值,都会重新new一个StringBuilder。所以建议使用直接使用StringBuilder/StringBuffer(线程安全)。

11. 常量使用大写

12. 使用带缓冲的输入输出流进行IO操作

13. 尽量使用增强for遍历

14. 不要使用魔法值

15. 尽量少用或禁用 join 关联表,在应用端组装数据,方便以后的分库

16. 实现类和实现类之间慎用 extends,因为增强了耦合性,修改父类时可能要重构代码。

相关文章

  • jvm原理

    35 个 Java 代码性能优化总结 优化代码可以减小代码的体积,提高代码运行的效率。从 JVM 内存模型谈线程安...

  • java代码优化总结

    上次面试的时候,免面试官问我java代码优化,虽然平时在实际开发中也有注意这方面的问题,但当时就是没回来上来,都怪...

  • 差距不止一星半点!Github星标85K的性能优化法则圣经

    java 性能 优化_Java性能优化的5个技巧 java 性能 优化 优化Java代码需要了解Java中的不同元...

  • android文章总结- 收藏集 - 掘金

    35 个 Java 代码性能优化总结 - 后端 - 掘金前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些...

  • java代码性能优化总结

    代码优化的目标是: 1、减小代码的体积 2、提高代码运行的效率 代码优化细节 (1)尽量指定类、方法的final修...

  • Java代码性能优化总结

    代码优化的目标:减小代码的体积提高代码的运行效率 尽量指定类,方法的final的修饰符 尽量重用对象 尽可能使用局...

  • Java代码性能优化总结

    前代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影...

  • Java 代码性能优化总结

    平时做的一些笔记,记不得出处了,知识共享吧 代码优化的目标是: 减小代码的体积 提高代码运行的效率 代码优化细节 ...

  • Java 代码性能优化总结

    前言 代码优化,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什...

  • Java代码优化总结(1)

    写在之前 最近,进行了不少代码的优化的部分。免得以后忘记,在这里分享给大家,希望对大家能有点微不足道的帮助! 正文...

网友评论

      本文标题:java代码优化总结

      本文链接:https://www.haomeiwen.com/subject/vndooqtx.html