gpt4 book ai didi

java - 在 java 中将逻辑拆分为多个方法会减慢执行速度吗?如果是,那么我们应该避免重构代码吗

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:17:43 25 4
gpt4 key购买 nike

http://s24.postimg.org/9y073weid/refactor_vs_non_refactor.png enter image description here那么这里是一个简单加法操作的重构和非重构代码的执行时间结果(以纳秒为单位)。 1 到 5 是代码的连续运行。我的目的只是找出将逻辑拆分为多个方法是否会导致执行变慢,结果表明是的,将方法放入堆栈需要花费大量时间。

如果我做错了什么,我会邀请以前对此做过一些研究或想调查这方面的人来纠正我,并从中得出一些结论性的结果。在我看来,是的,代码重构确实有助于使代码更加结构化和易于理解,但在像实时游戏引擎这样的时间关键系统中,我不希望重构。

以下是我使用的简单代码:

    package com.sim;

公共(public)类 NonThreadedMethodCallBenchMark{

public static void main(String args[]){
NonThreadedMethodCallBenchMark testObject = new NonThreadedMethodCallBenchMark();
System.out.println("************Starting***************");
long startTime =System.nanoTime();

for(int i=0;i<900000;i++){
//testObject.method(1, 2); // Uncomment this line and comment the line below to test refactor time
//testObject.method5(1,2); // uncomment this line and comment the above line to test non refactor time
}
long endTime =System.nanoTime();
System.out.println("Total :" +(endTime-startTime)+" nanoseconds");
}

public int method(int a , int b){
return method1(a,b);
}
public int method1(int a, int b){
return method2(a,b);
}
public int method2(int a, int b){
return method3(a,b);
}
public int method3(int a, int b){
return method4(a,b);
}
public int method4(int a, int b){
return method5(a,b);
}
public int method5(int a, int b){
return a+b;
}
public void run() {
int x=method(1,2);
}

最佳答案

您应该考虑可以优化掉没有任何用处的代码。如果你不小心,你可以计时检测代码没有做任何有用的事情,而不是运行代码。如果您使用多种方法,检测无用代码的时间可能会更长,因此会给出不同的结果。我总是会在代码预热后查看稳态性能。

对于代码中最昂贵的部分,小方法将被内联,因此它们不会对性能成本产生任何影响。可能发生的是

  • 可以更好地优化较小的方法,因为复杂的方法可能会破坏优化技巧。
  • 可以消除较小的方法,因为它们是内联的。

如果您从来不预热代码,它可能会变慢。但是,如果很少调用代码,则不太重要(低延迟系统除外,在这种情况下,我建议您在启动时预热代码)

如果你跑

System.out.println("************Starting***************");

for (int j = 0; j < 10; j++) {
long startTime = System.nanoTime();
for (int i = 0; i < 1000000; i++) {
testObject.method(1, 2);
//testObject.method5(1,2); // uncomment this line and comment the above line to test non refactor time
}
long endTime = System.nanoTime();
System.out.println("Total :" + (endTime - startTime) + " nanoseconds");
}

打印

************Starting***************
Total :8644835 nanoseconds
Total :3363047 nanoseconds
Total :52 nanoseconds
Total :30 nanoseconds
Total :30 nanoseconds

注意:30 纳秒是执行 System.nanoTime() 调用所需的时间。内循环和方法调用已被消除。

关于java - 在 java 中将逻辑拆分为多个方法会减慢执行速度吗?如果是,那么我们应该避免重构代码吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17259002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com