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