方法提取会对代码性能产生负面影响吗?

5

假设你有一个非常时间敏感的长方法,大约有200行代码。将一些代码提取到单独的方法中是否可能会减慢执行速度?

4个回答

1
很可能,您会得到加速。问题在于优化200行代码比较困难。实际上,当方法太长时,Hotspot会放弃对其进行优化。我曾经通过简单拆分一个长方法实现了2倍的加速效果。
短方法是可以的,并且它们将按需内联。因此,方法调用开销得到了最小化。通过内联,Hotspot可能会重新创建原始方法(由于其过长而不太可能),或者创建多个方法,其中一些方法可能包含原始方法中不存在的代码。
答案是“是的,它可能会变慢”。问题在于所选择的内联可能是次优的。但这非常不可能,我认为应该可以实现加速。

0

开销可以忽略不计,编译器会将方法内联以执行它们。

编辑:

类似问题


0

我不这么认为。
是的,一些调用可能会添加一些堆栈帧,但这并不需要太多时间,而且根据您的编译器,它甚至可以通过优化代码以使一个方法版本与许多方法的版本之间基本上没有区别。
通过在一个方法中实现所有内容而导致的可读性和可重用性的丧失绝对不值得(如果有的话)性能的提高。


0

重要的是,被分解出来的方法必须声明为私有最终。JVM中的即时编译器将会内联所有内容,这意味着将执行一个单一的大方法作为结果。

然而,在修改代码时,始终要对其进行基准测试。


请参阅此链接以反驳“final”有助于性能的观点:https://www.ibm.com/developerworks/java/library/j-jtp1029/index.html - slim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接