Java程序性能提高篇-----1

摘要:

   作为一名程序员,不仅要会写代码,更要会写高效的代码;在提高代码运行速度上。这里给大家介绍一些提高Java代码性能的小技巧。这里的一些优化技巧可能执行一次无法让你察觉它的优势,当你对其运行个上万次,就能发现性能是有极大的改善的。


  • 慎用异常

Java开发中,经常使用try-catch捕获异常,但是try-catch对系统性能而言是非常糟糕的。可能一次try-catch让你无法察觉,但是如果把try-catch放在循环之中,那么你的程序性能就会下降得飞快。

一般代码:

        int a = 0;
        for (int i = 0; i < 100000000; i++){
            try {
                a++;
            }catch (Exception e){
            }
        }

优化后代码:

 int a = 0;
        try {
            for (int i = 0; i < 100000000; i++){
                 a++;
            }
        }catch (Exception e){
        }

  • 使用局部变量

调用方法时传递的参数在调用中创建的临时变量是创建在栈里面的,如果是静态变量,实例变量,都是在堆中创建的,创建和获取的速度较慢

一般代码

public static int a = 0; //在类中定义
for (long i = 0; i < 100000000; i++){
            a++;
        }

优化代码:

 int a = 0; //方法中定义
 for (long i = 0; i < 100000000; i++){
     a++;
 }

  • 使用位运算代替乘除法

在所有运算中,位运算是最快的,所以当需要用到乘除法的时候可以考虑用位运算代替

//普通代码
long a = 100;
for(int i = 0; i < 100000000; i++){
    a*=2;
    a/=2;
}

//优化代码:
for(int i = 0; i < 100000000; i++){
    a <<= 1;
    a >>= 1;
}

  • 用一维数组代替二维数组

在数据量大的时候你会发现,二维数组和一维数组运行完全一样的功能,二维数组所花的时间是一维数组的两倍多。

        //二维数组
        int[][] doubleArray = new int[100][100];
        for (int k = 0; k < doubleArray.length; k++){
            for (int j = 0; j < doubleArray[0].length; j++){
                doubleArray[k][j] = j;
            }
        }
        
        //跟上面二维数组等价的一维数组
        int[] array = new int[1000000];
        int re = 0;
        for (int k = 0; k < array.length; k++){
            array[k] = k;
        }
        //优化代码,加循环放大后测试两者性能相差两倍多

  • 替换重复代码 && 提取表达式

通过多定义变量,减少重复的运算

        //二维数组
        int[][] doubleArray = new int[100][100];
        //提取重复的代码
        int row =  doubleArray.length;    
        int col = doubleArray[0].length;

        for (int k = 0; k < row; k++){
            for (int j = 0; j < col; j++){
                doubleArray[k][j] = j;
            }
        }
        
        //优化代码,提取重复代码

        for(int i = 0; i < 100000; i++){
          x = a * b * c * d;
          y = a * b * c / d; //a、b、c、d是随机数,每次进循环都不一样
        }

        //提取前面的相同表达式,进行优化
        for(int i = 0; i < 100000; i++){
          t = a * b * c; 
          x = t * d;
          y = t / d; //a、b、c、d是随机数,每次进循环都不一样
        }

     

  • 布尔运算代替位运算

Java对布尔运算有优化,当使用 && 的时候,只要前面的逻辑为false,后面的就不会再执行,同理,使用 || 的时候一样


        boolean a = false;
        boolean b = true;
        int d = 0;
        //位运算
        for (int i = 0; i < 1000000; i++){
            if (a & b & "JavaScript".contains("Java")){
                d++;
            }
        }
        //布尔运算,优化的方案
        for (int i = 0; i < 1000000; i++){
            if (a && b && "JavaScript".contains("Java")){
                d++;
            }
        }

  • 使用arrayCopy()函数来进行数组复制

该函数是native函数,Java通过调用操作系统的api来实现(通常来说,native方法优于普通的函数方法,优先使用native方法)

        
        int[] oldArray = new int[10000000];
        int n = oldArray.length;
        int[] newArray = new int[n];
        for (int i = 0 ; i < n; i++){
            //调用native方法
            System.arraycopy(oldArray, 0, newArray, 0, n);
        }

猜你喜欢

转载自blog.csdn.net/aa792978017/article/details/88804441