关于做大量计算的三个问题

Kev*_* Xu 6 java algorithm performance android computation

这只是关于进行大量计算的一系列问题.要么我在网上找不到答案,要么我还需要澄清.

  1. 传递(float, float, float)方法参数和(float[])数组有三个术语的速度是否更快?

  2. 方法返回float[]vs设置float[]作为参数传递给方法的内容是否更快?

  3. 用实际计算替换方法调用是否更快,而不是A=sum(B,C)更慢A=B+C?假设sum(x,y){return x+y}

编辑:

谢谢你的所有答案,伙计们!在我关闭这个帖子之前,如果有人知道,我还有一个更快的问题:

  1. 如果我正在使用一个类一遍又一遍地重复计算相同的统计数据(然后将它们抛弃),那么创建实例变量以充当容器以避免连续的重新分配和解除分配会更好吗?

Erw*_*idt 6

传递(float, float, float)方法参数和 (float[])数组有三个术语的速度是否更快?

那要看.如果你已经有一系列浮动方便,它应该没有任何区别.如果每次都在构造数组,则需要一些时间来分配数组,并且可能需要一些时间来构造数组.

有关系吗?如果你在一个连续执行了数百万次的紧密循环中执行它,并且在应用程序的生命周期中多次执行它,它肯定会这样做.

方法返回float []与设置作为参数传递给方法的float []的内容相比更快吗?

如果您需要每次为返回值构造float数组,那么肯定不会比在预先存在的数组中设置值更快.仅仅因为两个选项都涉及设置值,其中一个选项具有创建新数组的额外任务.但是创建一个新阵列可能非常非常快.

尽管如此,如果您在应用程序中快速连续执行数百万次,对其进行基准测试,可能会为您节省一些时间.

用实际计算替换方法调用是否更快,而不是A=sum(B,C)更慢A=B+C?假设 sum(x,y){return x+y}

几乎不可能说.内置的HotSpot代码优化器非常擅长发现这些东西并为你的优化.

如果您对此进行基准测试,请尝试制作该sum方法private,这将使HotSpot更容易确定它可以内联(尽管如果您没有任何被覆盖的sum方法实现,它也会自行发现)


关于基准测试的一点是:

它可能会帮助您的应用程序,使用您正在使用的当前版本的VM(以及您当前的代码库).如果您决定升级到新版本的VM,您可能会发现性能特征发生变化,您可能需要再次进行优化.

所以只有它对你的应用程序真的很重要,否则它可能是浪费精力.

最好先关注您的算法及其时空复杂性; 任何收益都会永远增加.