哪种做法更好(多次从另一种方法调用方法或自己做同样的事情)

时间:2013-07-28 14:38:03

标签: java performance methods iterator

我班上有这两种方法。第二种方法做同样的事情,但对于成千上万的多个值(比如五万)。那么哪一个更好: 的修改

public static int isUsed(int num) {
    if((port < startPort || port > endPort)) {
        throw new IllegalArgumentException();
    }
    ServerSocket serverSocket;
    try {
        serverSocket = new ServerSocket(port);
        serverSocket.close();
        return false;
    } catch (IOException e) {
        return true;
    }
}

public static int areAllUsed(int arr[]) {
    //do the same thing several thousand times     >>> Is thisbetters  OR
    // call isUsed several thousand times          >>> this is better
}

更好的意思是记忆或表现。

4 个答案:

答案 0 :(得分:4)

如果需要在多个位置重用一段逻辑,定义一个函数是重用代码的最佳方法。在另一个地方复制粘贴相同的逻辑并不是一个好主意,因为它会降低可读性,并在您必须更改逻辑时成为维护责任。

很少或没有性能影响,因为如果Java编译器发现它有用,它会自动内联静态方法。

答案 1 :(得分:2)

DRY就是答案:不要重复自己。

如果您已在isUsed()中编码了算法,则不要在其他方法中重新实现它。致电isUsed()

JVM的效率足以使差异可以忽略不计,甚至不存在,因为isUsed()方法将由JIT动态内联到areAllUsed()

答案 2 :(得分:2)

在这种情况下,方法调用很可能与性能角度没有区别。对于一个小的方法,JIT编译器很可能会在调用它时内联方法体。 (请注意,对于非静态最终方法,它可以执行相同的操作,甚至在某些情况下也可以使用非静态,非最终方法。)

内存使用量的差异是微不足道的。


无论哪种方式,尝试再次猜测编译器/优化器通常都是一个坏主意。最好将代码编写为可读可维护,并让优化器处理优化。如果性能是一个真正的问题,那么使用真实/真实的输入数据 profile 您完成的代码......并使用您的分析结果来确定您应该在哪里指导您的工作。

答案 3 :(得分:0)

这取决于您的申请。我会建议多次使用电话。代码越不线性,如果出现问题,调试就越容易。如果出现问题,您只需要检查isUsed是否有错误。