首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java:使用n个变量和使用硬编码数组元素之间是否存在性能差异?

Java:使用n个变量和使用硬编码数组元素之间是否存在性能差异?
EN

Stack Overflow用户
提问于 2012-12-07 01:11:21
回答 3查看 582关注 0票数 4

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

如果我使用多个变量,或者如果我使用具有硬编码索引的数组,性能是否会有所不同?如果有,哪一个更好?

举例说明:

代码语言:javascript
复制
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);

代码语言:javascript
复制
RGB[0] = (XYZ[0] *  3.2406) + (XYZ[1] * -1.5372) + (XYZ[2] * -0.4986);
RGB[1] = (XYZ[0] * -0.9689) + (XYZ[1] *  1.8758) + (XYZ[2] *  0.0415);
RGB[2] = (XYZ[0] *  0.0557) + (XYZ[1] * -0.2040) + (XYZ[2] *  1.0570);

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-07 09:06:55

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-12-07 01:22:19

这肯定是记忆上的不同。

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

代码语言:javascript
复制
8    8               8               8  = 24 bytes
R = (X *  3.2406) + (Y * -1.5372) + (Z * -0.4986);
8                                       = 32 bytes
G = (X * -0.9689) + (Y *  1.8758) + (Z *  0.0415);
8                                       = 40 bytes
B = (X *  0.0557) + (Y * -0.2040) + (Z *  1.0570);

第二个场景使用:

代码语言:javascript
复制
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);

参考:http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

票数 3
EN

Stack Overflow用户

发布于 2012-12-07 01:32:30

你应该想得更远一点:

x,y,z值从何而来?

您有坐标的x[]、y[]和z[]数组吗?你在哪里迭代?

代码语言:javascript
复制
for (int i = 0; i < len; i++) {
   process(x[i], y[i], z[i];
}

毫无疑问,这会更快地在内部迭代:

公共空进程(双x[]、双y[]、双z[]) {

代码语言:javascript
复制
   for (int i = 0; i < len; i++) {
       rbgb[0] = (x[i] * 3.24606 +  y[i] * 1.5372 + z[i] * -0.4986);

    }

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13748872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档