Java 在节省内存和CPU方面,这些操作中哪一个更好?(爪哇)
我在一个内存有限的环境中编程。所以我想知道哪一个是最好的选择,为什么。这会有显著的区别吗? 不确定Java如何处理程序集 选择A?对每个for循环执行if检查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
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中,一大块代码是重复的是的,但重复的代码不会被执行。如果它能提高执行时间,那么额外的几行代码也没什么坏处: