Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在节省内存和CPU方面,这些操作中哪一个更好?(爪哇)_Java_Loops_Memory_Assembly_Cpu - Fatal编程技术网

Java 在节省内存和CPU方面,这些操作中哪一个更好?(爪哇)

Java 在节省内存和CPU方面,这些操作中哪一个更好?(爪哇),java,loops,memory,assembly,cpu,Java,Loops,Memory,Assembly,Cpu,我在一个内存有限的环境中编程。所以我想知道哪一个是最好的选择,为什么。这会有显著的区别吗? 不确定Java如何处理程序集 选择A?对每个for循环执行if检查 private static boolean checkState(int[][] matrix, int option){ for (int X=0; X < 5; X++) for (int Y=0; Y < 5; Y++) if (option == 0){ //if op

我在一个内存有限的环境中编程。所以我想知道哪一个是最好的选择,为什么。这会有显著的区别吗? 不确定Java如何处理程序集

选择A?对每个for循环执行if检查

private static boolean checkState(int[][] matrix, int option){
    for (int X=0; X < 5; X++)
        for (int Y=0; Y < 5; Y++)
            if (option == 0){ //if option is 0, checks if empty (-1 on all fields means empty in this case)
                if (matrix[Y][X] != -1)
                    return false;
            } else //if option is 1, checks if full (if at least one camp has -1, it means it's not full)
                if (matrix[Y][X] == -1) 
                    return false;

    return true;
}
选择B?if语句在for循环之前完成,但是for循环有两个几乎相同的版本

private static boolean checkState(int[][] matrix, int option){
    if (option == 0) {
        for (int X=0; X < 5; X++)
            for (int Y=0; Y < 5; Y++)
                if (matrix[Y][X] != -1)
                    return false;
    } else
        for (int X=0; X < 5; X++)
            for (int Y=0; Y < 5; Y++)
                if (matrix[Y][X] == -1)
                    return false;
    return true;
}
丙组?两种截然不同的功能

private static boolean checkEmpty(int[][] matrix){
    for (int X=0; X < 5; X++)
                for (int Y=0; Y < 5; Y++)
                    if (matrix[Y][X] != -1)
                        return false;
    return true;
}

private static boolean checkFull(int[][] matrix){
    for (int X=0; X < 5; X++)
                for (int Y=0; Y < 5; Y++)
                    if (matrix[Y][X] != -1)
                        return false;
    return true;
}

我认为选项B会更好,因为if条件只会被检查一次,如果它为真,if块中的代码将被执行,否则else块中的代码将被执行

选项A显然是一个坏选项,因为if块在循环的每次迭代中都会被执行


选项C似乎有些过分,不需要为此创建单独的方法。

以上所有方法都不会对性能产生任何显著影响。从技术上讲,选择C更好。一个已定义的定向方法只执行分配给它的单个任务,这对性能和可读性都有好处。但对于5x5矩阵深度,您不会看到3种方法之间存在任何重大偏差。此外,您的示例对内存消耗没有影响,但CPU…可能是的。但是,对于5x5矩阵,程序将在你眨眼之前完成,因此我认为它不会有多大影响。

尽管选项B看起来比选项a性能更好,但这都是关于在CPU内部处理的分支预测。事实上,如果您看到任何性能差异,我都会感到惊讶。这意味着,您不应该优化代码以获得更好的性能。您应该始终优化代码以获得更好的可读性。选项C有一点复制和粘贴错误,顺便说一句,这是一个很好的方式。总是这样一个大字@塞瓦莱克谢耶夫:是的,而且永远正确说真的,我倾向于用这么大的词来解释初学者,他们应该只朝一个方向走,而不去想除此之外的任何事情。一旦习惯了一些好的或最佳的实践,你可以考虑用另一种方式来做它的工作。不同之处在于知识和经验。是的,但在选项B中,一大块代码是重复的是的,但重复的代码不会被执行。如果它能提高执行时间,那么额外的几行代码也没什么坏处: