Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.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/2/csharp/266.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:使用n个变量或使用硬编码数组元素之间有性能差异吗?_Java_Arrays_Performance_Hardcoded - Fatal编程技术网

Java:使用n个变量或使用硬编码数组元素之间有性能差异吗?

Java:使用n个变量或使用硬编码数组元素之间有性能差异吗?,java,arrays,performance,hardcoded,Java,Arrays,Performance,Hardcoded,我正在为自己做一个节目,突然出现了这个问题。这个程序处理图形,所以我必须记住性能 如果我使用多个变量,或者如果我使用带有硬编码索引的数组,性能会有差异吗?如果有,哪一个更好 举例说明: R = (X * 3.2406) + (Y * -1.5372) + (Z * -0.4986); G = (X * -0.9689) + (Y * 1.8758) + (Z * 0.0415); B = (X * 0.0557) + (Y * -0.2040) + (Z * 1.0570); 或 提

我正在为自己做一个节目,突然出现了这个问题。这个程序处理图形,所以我必须记住性能

如果我使用多个变量,或者如果我使用带有硬编码索引的数组,性能会有差异吗?如果有,哪一个更好

举例说明:

R = (X *  3.2406) + (Y * -1.5372) + (Z * -0.4986);
G = (X * -0.9689) + (Y *  1.8758) + (Z *  0.0415);
B = (X *  0.0557) + (Y * -0.2040) + (Z *  1.0570);


提前谢谢。

肯定是记性不同

您的第一个场景使用(假设为双倍):

第二个场景使用:

12 + 8    12 + 8               8                    8 = 56 bytes
RGB[0] = (XYZ[0] *  3.2406) + (XYZ[1] * -1.5372) + (XYZ[2] * -0.4986);
8                                                     = 64 bytes
RGB[1] = (XYZ[0] * -0.9689) + (XYZ[1] *  1.8758) + (XYZ[2] *  0.0415);
8                                                     = 72 bytes
RGB[2] = (XYZ[0] *  0.0557) + (XYZ[1] * -0.2040) + (XYZ[2] *  1.0570);

参考资料:

您应该进一步思考:

x,y,z值来自哪里

坐标是否有x[]y[]和z[]数组? 你在哪里迭代

for (int i = 0; i < len; i++) {
   process(x[i], y[i], z[i];
}
for(int i=0;i
毫无疑问,在内部进行迭代会更快:

公共作废流程(双x[],双y[],双z[]{

for(int i=0;i

}

使用单独的变量很可能更快


为什么?JVM会在运行时优化代码以加快速度。它会跟踪每个变量的流和值,以了解如何优化代码。例如,它可能会意识到方法的参数从未赋值,因此是常量。但它不会对数组的每个元素都赋值。数组只被视为一个巨大的可变变量。因此,当使用单独的变量时,您更有可能获得最佳代码。

如果存在性能差异(我对此表示怀疑),它不太可能成为您程序中的瓶颈。请使用最简单、可读性最好的方法,并转到真正的性能问题所在的位置。变量在维护方面更好。使用数组时,您可能使用错误的索引获取值,并且很难识别问题。@muruga发生过几次。但我改为个别变量是因为某些东西严重地减慢了程序的速度。但我不确定它是什么。@GuiRitter我真的怀疑。我不认为这些变量会真正地减慢程序的速度(可能有点过头了),但您必须仔细查看整个程序,而不是尝试一些评测(:XYZ指的是CIEXYZ,颜色空间,而不是坐标。因此数组XYZ指的是一种颜色,单个变量指的是颜色的组成部分。我一次只使用一种颜色,所以数组索引总是硬编码的。内存方面,你是对的。数组会有开销。但我最感兴趣的是速度。怎么样t这是:
12 + 8    12 + 8               8                    8 = 56 bytes
RGB[0] = (XYZ[0] *  3.2406) + (XYZ[1] * -1.5372) + (XYZ[2] * -0.4986);
8                                                     = 64 bytes
RGB[1] = (XYZ[0] * -0.9689) + (XYZ[1] *  1.8758) + (XYZ[2] *  0.0415);
8                                                     = 72 bytes
RGB[2] = (XYZ[0] *  0.0557) + (XYZ[1] * -0.2040) + (XYZ[2] *  1.0570);
for (int i = 0; i < len; i++) {
   process(x[i], y[i], z[i];
}
   for (int i = 0; i < len; i++) {
       rbgb[0] = (x[i] * 3.24606 +  y[i] * 1.5372 + z[i] * -0.4986);

    }