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

时间:2015-05-13 04:01:31

标签: java android performance algorithm computation

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

  1. (float, float, float)作为方法参数与(float[])传递,其中数组有三个术语是否更快?

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

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

  4. 编辑:

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

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

2 个答案:

答案 0 :(得分:6)

  

(float, float, float)作为方法参数vs传递更快   (float[])数组有三个术语?

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

重要吗?如果你是在一个连续执行了数百万次的紧密循环中执行它,并且在应用程序的生命周期中执行了很多次,那么肯定可以这样做。

  

方法返回float []和设置内容是否更快?   一个float []作为参数传递给方法?

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

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

  

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

几乎不可能说。内置的HotSpot代码优化器非常擅长发现这些内容,并为您的内容进行优化。

如果您对此进行基准测试,请尝试制作sum方法private,这样可以让HotSpot更轻松地决定是否可以内联(尽管如果您不这样做,它也可以自行发现)没有任何被覆盖的sum方法实现)

关于基准测试的一点是:

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

所以只有这对你的申请真的很重要,否则可能是浪费精力。

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

答案 1 :(得分:2)

  

1)传递(float,float,float)作为方法参数vs更快   (float [])数组有三个术语?

1。)取决于。如果单独的浮点数在内存中不连续,则浮点数[]可能会有所帮助。

  

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

2。)取决于浮动[]是否已存在于任何一种情况下。如果您正在创建一个新的float []并将其传入,或者创建一个新的float []并返回它,则成本是相同的。但是如果在任何一种情况下都可以以某种方式使用现有的float [],那么速度会更快并且创建的分配更少。

  

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

3。)我不确定,我更多的是C#程序员。我知道在运行C#时,Xbox 360使用的基本CLR(公共语言运行时),手动计算比使用重载方法便宜得多。我不确定Java是否在任何平台上都有类似的问题。