Java中相同的代码片段在两个程序中花费的时间非常不同?

Java中相同的代码片段在两个程序中花费的时间非常不同?,java,algorithm,runtime,genetic-algorithm,execution-time,Java,Algorithm,Runtime,Genetic Algorithm,Execution Time,基本上我有两个基于启发式的算法。我在这两个版本中都使用了一段代码。代码采用激励向量,并基于该向量给出成本函数的值。代码的一部分生成激励向量。这一部分对于两种算法是不同的。代码的另一部分基于激励向量计算成本函数。这一部分对于两种算法都是逐字逐句的。然而,在一种算法(基于遗传算法)中,执行该代码需要5到10秒,而在另一种算法中,相同的代码需要5分钟以上。我不明白为什么会有如此巨大的差异。下面是代码中执行时间不同的部分。显而易见,本部分包括循环的基本知识和简单的数学知识。所有其他数组的值都是已知的,目

基本上我有两个基于启发式的算法。我在这两个版本中都使用了一段代码。代码采用激励向量,并基于该向量给出成本函数的值。代码的一部分生成激励向量。这一部分对于两种算法是不同的。代码的另一部分基于激励向量计算成本函数。这一部分对于两种算法都是逐字逐句的。然而,在一种算法(基于遗传算法)中,执行该代码需要5到10秒,而在另一种算法中,相同的代码需要5分钟以上。我不明白为什么会有如此巨大的差异。下面是代码中执行时间不同的部分。显而易见,本部分包括循环的基本知识和简单的数学知识。所有其他数组的值都是已知的,目标是计算“CurrentInv”

long start6=System.currentTimeMillis();

对于(int a=0;a你知道这是导致延迟的特定部分吗?这段代码是提取到一个单独的方法中,该方法使用两种启发式算法调用完全相同,还是复制并粘贴两次?你能在答案中添加两个部分,在慢速和快速情况下给出以下变量的值吗?\u inv索引,No.1,_destNE。另外,如果你能给出nSizeD和nSizeO元素的粗略近似值,那会很有帮助。你的激励向量在这两种情况下是相同的,还是不同的?如果不同,这是否说明了在缓慢的情况下处理时间更长?@Daniel我假设他运行了代码并观察了运行所需的时间;参见他样本的最后一行。@Patrick87嗯,好的,打得好。
long start6 = System.currentTimeMillis();
for(int a=0;a<_invIndex;a++){
    CurrentInv[a]=Invs[a];
    for (int i=0; i<no1;i++){
        for(int j=0;j<no1;j++){
            if(i!=j){
                for(int b=0; b<_destNe; b++){
                    if(countOD[i][j]>0){
                        if(i==b){
                            if(j==a){
                                CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][0][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][0][(int)nSizeO[i][j]+1];
                            }
                        }}
                    if(countOD[i][j]>0){
                        if(nSizeO[i][j]!=0){
                            for(int k=1; k<(int)nSizeO[i][j]+1; k++){
                                if( jaggedO[i][j][k-1]==b){
                                    if( j==a){
                                        CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][k][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][k][(int)nSizeO[i][j]+1];

                                    }
                                }
                            }
                        }
                        if(nSizeD[i][j]!=0){
                            for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
                                if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==b){
                                    if( j==a){
                                        CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][d][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][d][(int)nSizeO[i][j]+1];

                                    }
                                }
                            }
                        }
                        if( i==b){
                            if(nSizeD[i][j]!=0){
                                for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
                                    if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==a){
                                        CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][0][d]*countOD[i][j]*x[i][j][0][d];

                                    }}
                            }}
                        if(nSizeO[i][j]!=0){
                            for(int k=1; k<(int)nSizeO[i][j]+1; k++){
                                if( jaggedO[i][j][k-1]==b){
                                    if(nSizeD[i][j]!=0){
                                        for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
                                            if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==a){
                                                CurrentInv[a]=CurrentInv[a]+onlyBike[i][j][k][d]*countOD[i][j]*x[i][j][k][d];

                                            }}}
                                }
                            }
                        }
                        //countOD2[a][b]=countOD[i][j];
                        if(i==a){
                            if(j==b){
                                CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][0][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][0][(int)nSizeO[i][j]+1];
                            }
                        }
                        if( i==a){
                            if(nSizeO[i][j]!=0){
                                for(int k=1; k<(int)nSizeO[i][j]+1; k++){
                                    if( jaggedO[i][j][k-1]==b){
                                        CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][0][k]*countOD[i][j]*x[i][j][0][k];
                                    }}}}

                        if( i==a){
                            if(nSizeD[i][j]!=0){
                                for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
                                    if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==b){
                                        CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][0][d]*countOD[i][j]*x[i][j][0][d];
                                    }}}}


                        //countOD2[a][b]=countOD[i][j]; 
                        if(nSizeO[i][j]!=0){
                            for(int k=1; k<(int)nSizeO[i][j]+1; k++){
                                if( jaggedO[i][j][k-1]==a){
                                    if(nSizeD[i][j]!=0){
                                        for(int d=(int)nSizeO[i][j]+2; d<(int)nSizeD[i][j]+(int)nSizeO[i][j]+2; d++){
                                            if( jaggedD[i][j][d-(int)nSizeO[i][j]-2]==b){
                                                CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][k][d]*countOD[i][j]*x[i][j][k][d];
                                            }}}
                                }
                            }
                        }
                        //countOD2[a][b]=countOD[i][j]; 
                        if(nSizeO[i][j]!=0){
                            for(int k=1; k<(int)nSizeO[i][j]+1; k++){
                                if( jaggedO[i][j][k-1]==a){
                                    if( j==b){
                                        CurrentInv[a]=CurrentInv[a]-onlyBike[i][j][k][(int)nSizeO[i][j]+1]*countOD[i][j]*x[i][j][k][(int)nSizeO[i][j]+1];
                                    }
                                }
                            }
                        }
                    }

                }
            }
        }
    }
}
long end6 = System.currentTimeMillis();
_solutiontime = (end6 - start6);
System.out.println(" currentinvtime: "+_solutiontime);