哪些操作在内存节省和CPU方面更好? (JAVA)

时间:2014-12-12 06:55:19

标签: java loops memory assembly cpu

我在内存有限的环境中编程。所以我想知道哪个是最好的选择,为什么。它有显着差异吗? 不确定Java如何处理Assembly ...

选项A?对每个循环执行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;
}

Pption C?两个不同的功能

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;
}

2 个答案:

答案 0 :(得分:0)

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

选项A显然是一个糟糕的选择,因为if块会在循环的每次迭代中执行。

选项C似乎有点矫枉过正,没有必要为此事创建单独的方法。

答案 1 :(得分:0)

以上都不会在性能上产生任何相当大的差异。从技术上讲,选项C更好。定义分配给它的单个任务的定义定向方法对于性能和可读性更好。但对于5x5矩阵深度,您不会发现3种方法之间存在任何重大偏差。另外你的例子对内存消耗没有影响,但CPU ......是的。但是再一次为5x5矩阵,程序会在你眨眼之前完成,所以我不认为这会很重要。