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()
。