这只是关于进行大量计算的一系列问题。要么我无法在网上找到答案,要么我还需要澄清。
将(float, float, float)
作为方法参数与(float[])
传递,其中数组有三个术语是否更快?
方法返回float[]
vs设置作为参数传递给方法的float[]
的内容是否更快?
用实际计算替换方法调用是否更快,而不是A=sum(B,C)
慢于A=B+C
?假设sum(x,y){return x+y}
编辑:
感谢所有答案,伙计们!在我关闭这个帖子之前,如果有人知道,我还有一个更快的问题:
答案 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是否在任何平台上都有类似的问题。