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

时间:2014-08-12 13:16:40

标签: java performance refactoring

假设你有很长的方法,大约有200行非常时间敏感的代码。是否有可能将代码的某些部分提取到单独的方法会降低执行速度?

4 个答案:

答案 0 :(得分:1)

最有可能的是,你会获得加速。问题是优化200线野兽很难。实际上,当方法太长时,Hotspot会放弃它。 一旦我通过简单地拆分一个长方法就达到了加速因子2。

简短的方法很好,它们将根据需要进行内联。因此,方法调用开销最小化。通过内联,Hotspot可能会重新创建您的原始方法(由于其长度过长而不可能)或创建多个方法,其中一些方法可能包含原始方法中不存在的代码。

答案是“是的,它可能会变慢。”问题是选择的内联可能不是最理想的。但是,这是非常不可能的,我希望能加速。

答案 1 :(得分:0)

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

编辑:

similar question

答案 2 :(得分:0)

我不这么认为 是的,会添加一些调用和一些堆栈,但这不会耗费大量时间,并且取决于您的编译器,它甚至可能以这样的方式优化代码:与一个方法相比,版本与一个方法基本没有区别很多。
通过在一个方法中实现所有方法而获得的可读性和可重用性的损失绝对不值得(如果在所有现有的情况下)性能提升。

答案 3 :(得分:0)

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

但是,在修改代码时,请始终对代码进行基准测试。

相关问题