Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 哪种做法更好(多次从另一个方法调用一个方法,或者自己做同样的事情)_Java_Performance_Methods_Iterator - Fatal编程技术网

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

Java 哪种做法更好(多次从另一个方法调用一个方法,或者自己做同样的事情),java,performance,methods,iterator,Java,Performance,Methods,Iterator,我班上有这两种方法。第二种方法也可以做同样的事情,但它只适用于数万(比如五万)的多个值。那么,哪一个更好: 编辑 public static int isUsed(int num) { if((port < startPort || port > endPort)) { throw new IllegalArgumentException(); } ServerSocket serverSocket; try { ser

我班上有这两种方法。第二种方法也可以做同样的事情,但它只适用于数万(比如五万)的多个值。那么,哪一个更好: 编辑

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
}
使用公共静态int(int num){ 如果((端口<开始端口| |端口>结束端口)){ 抛出新的IllegalArgumentException(); } 服务器套接字服务器套接字; 试一试{ serverSocket=新的serverSocket(端口); serverSocket.close(); 返回false; }捕获(IOE异常){ 返回true; } } 已使用公共静态int区域(int arr[]){ //做同样的事情几千次>>>这是更好还是更好 //呼叫被使用了几千次>>>这样更好 }
我指的是记忆或表现更好。

答案是:不要重复你自己

如果算法已经在
isUsed()
中编码,则不要在其他方法中重新实现它。调用
isUsed()


JVM的效率足以使差异变得微不足道,甚至不存在,因为JIT会将
isUsed()
方法动态地内联到
areAllUsed()

DRY是答案:不要重复你自己

如果算法已经在
isUsed()
中编码,则不要在其他方法中重新实现它。调用
isUsed()


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

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


这对性能几乎没有影响,因为如果Java编译器认为静态方法有益,它会自动内联静态方法。

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


这对性能几乎没有影响,因为如果Java编译器认为静态方法有益的话,它会自动内联静态方法。

在这种情况下,方法调用很有可能从性能角度看没有什么不同。对于这么小的方法,JIT编译器很有可能在调用方法体时内联该方法体。(请注意,对于非静态final方法,甚至在某些情况下,对于非静态、非final方法,它也可以做同样的事情。)

内存使用方面的差异很小



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

在这种情况下,从性能角度来看,方法调用很有可能没有什么不同。对于这么小的方法,JIT编译器很有可能在调用方法体时内联该方法体。(请注意,对于非静态final方法,甚至在某些情况下,对于非静态、非final方法,它也可以做同样的事情。)

内存使用方面的差异很小



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

这取决于您的应用程序。我建议您多次使用该电话。代码的线性度越低,如果出现问题,调试就越容易。如果出现问题,您只需检查isUsed是否有错误。

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

我只是忘了在每个测试中提到他们可能必须创建新对象的方法。@DigvijayYadav没关系-无论他们在测试中需要做什么,你的其他方法也必须做,对吗?然后向我们展示真正的
isUsed()
方法,而不是假的。您可能能够在不反复创建相同对象的情况下计算出算法,但这完全取决于实际代码。无法重用相同的ServerSocket实例并更改其端口。因此,您必须为每个端口创建一个新的ServerSocket。所以只要在
areAllUsed()
的循环中调用
isUsed()
。我只是忘了在每个测试中提到他们可能必须创建新对象的方法。@DigvijayYadav没关系-不管他们在测试中需要做什么,你的其他方法也必须这样做,对吗?然后给我们展示真正的
isUsed()
方法,而不是假的。您可能能够在不反复创建相同对象的情况下计算出算法,但这完全取决于实际代码。无法重用相同的ServerSocket实例并更改其端口。因此,您必须为每个端口创建一个新的ServerSocket。因此,只需在
areAllUsed()
的循环中调用
isUsed()