Java,简单程序的执行时间太长

Java,简单程序的执行时间太长,java,Java,大家早上好,我正在尝试写一个方法,给定一个N数,它将创建一个大小为N*N的螺旋矩阵,下面的方法工作得很好,但代码的执行时间大约是2秒,而它应该是几毫秒左右,我不知道是什么使代码如此缓慢,你能帮我弄清楚吗?谢谢 我写了另一个方法,称这个方法(spirale),不同的数字按以下顺序排列,结果如下 test1: n=10 execution time-> 2475ms test2: n=5 execution time-> 7795ms test3: n=1 execution time-

大家早上好,我正在尝试写一个方法,给定一个N数,它将创建一个大小为N*N的螺旋矩阵,下面的方法工作得很好,但代码的执行时间大约是2秒,而它应该是几毫秒左右,我不知道是什么使代码如此缓慢,你能帮我弄清楚吗?谢谢

我写了另一个方法,称这个方法(spirale),不同的数字按以下顺序排列,结果如下

test1: n=10 execution time-> 2475ms
test2: n=5 execution time-> 7795ms
test3: n=1 execution time-> 7169ms
test4: n=0 execution time-> 7034ms
test5: n=6 execution time-> 7056ms



    public static int[][] spirale(int N){
    int i=0, j=0, giro = 0, numbers = 1;
    int mat[][] = new int[N][N];
    while(true){
        for(j=0+giro; j<N-giro; j++){
            if(numbers>N*N) return mat;
            mat[i][j] = numbers++;
        }
        j--;
        for(i=1+giro; i<N-giro ; i++){
            if(numbers>N*N) return mat;
            mat[i][j] = numbers++;
        }
        i--;
        for(j=N-2-giro; j>=0+giro; j--){
            if(numbers>N*N) return mat;
            mat[i][j] = numbers++;
        }
        j++;
        for(i=N-2-giro ; i>0+giro ; i--){
            if(numbers>N*N) return mat;
            mat[i][j] = numbers++;
        }
        i++;
        giro++;
    }

}
test1:n=10执行时间->2475ms
测试2:n=5执行时间->7795ms
测试3:n=1执行时间->7169ms
测试4:n=0执行时间->7034ms
测试5:n=6执行时间->7056ms
公共静态int[][]spirale(int N){
INTI=0,j=0,giro=0,数字=1;
int mat[][]=新的int[N][N];
while(true){
对于(j=0+giro;jN*N)返回垫;
mat[i][j]=数字++;
}
j--;
对于(i=1+giro;iN*N)返回垫;
mat[i][j]=数字++;
}
我--;
对于(j=N-2-giro;j>=0+giro;j--){
如果(编号>N*N)返回mat;
mat[i][j]=数字++;
}
j++;
对于(i=N-2-giro;i>0+giro;i--){
如果(编号>N*N)返回mat;
mat[i][j]=数字++;
}
i++;
giro++;
}
}
一般来说:

test4: n=0 execution time-> 7034ms
建议问题不在
spirale
方法中,因为它将在这里的第一次迭代中立即返回:

if(数字>N*N)返回垫

我想您应该查看代码中的度量值(您必须在代码中度量它,而不仅仅是由于流程创建开销而导致的程序执行时间)

无论如何,这对于你使用的小N并不重要,但是你只需要计算一次N*N。我想编译器优化会帮你完成这项工作

我的意思是:

int squareN = N*N;
 while(true){

        for(j=0+giro; j<N-giro; j++){
            if(numbers>squareN ) return mat;
            mat[i][j] = numbers++;
        }
        j--;
        for(i=1+giro; i<N-giro ; i++){
            if(numbers>squareN ) return mat;
            mat[i][j] = numbers++;
        }
        i--;
        for(j=N-2-giro; j>=0+giro; j--){
            if(numbers>squareN ) return mat;
            mat[i][j] = numbers++;
        }
        j++;
        for(i=N-2-giro ; i>0+giro ; i--){
            if(numbers>squareN ) return mat;
            mat[i][j] = numbers++;
        }
        i++;
        giro++;
    }
int squareN=N*N;
while(true){
对于(j=0+giro;jsquareN)返回垫;
mat[i][j]=数字++;
}
j--;
对于(i=1+giro;isquareN)返回垫;
mat[i][j]=数字++;
}
我--;
对于(j=N-2-giro;j>=0+giro;j--){
如果(数字>平方)返回垫;
mat[i][j]=数字++;
}
j++;
对于(i=N-2-giro;i>0+giro;i--){
如果(数字>平方)返回垫;
mat[i][j]=数字++;
}
i++;
giro++;
}
JVM启动和“变暖”类型足够大,足以使这些数字变得“普通”。如果需要度量代码执行情况,应该使用方法