Java NetworkInterface.getByInetAddress()花费的时间太长
我有一个非常奇怪的情况…我运行java时是这样的:Java NetworkInterface.getByInetAddress()花费的时间太长,java,jvm,Java,Jvm,我有一个非常奇怪的情况…我运行java时是这样的: java-Dfile.encoding=UTF-8-server-classpath“…jar”-verbose com.class args 我可以看到它在以下情况下减速20秒: [从jdk\jre\lib\rt.jar加载的java.net.DefaultInterface] 之前:[从jdk\jre\lib\rt.jar加载了java.net.NetworkInterface$1] 有什么问题吗?提前谢谢你的帮助 编辑: 在verbose
java-Dfile.encoding=UTF-8-server-classpath“…jar”-verbose com.class args
我可以看到它在以下情况下减速20秒:
[从jdk\jre\lib\rt.jar加载的java.net.DefaultInterface]
之前:[从jdk\jre\lib\rt.jar加载了java.net.NetworkInterface$1]
有什么问题吗?提前谢谢你的帮助
编辑:
在verbose:jni上,我可以看到它停在:
[动态链接本机方法java.net.NetworkInterface.getByInetAddress0…JNI]
所以我执行了以下程序:
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
class HelloWorldApp {
public static void main(String[] args) {
InetAddress ip;
try {
ip = InetAddress.getLocalHost();
System.out.println("Current IP address : " + ip.getHostAddress());
long startTime = System.nanoTime();
NetworkInterface network = NetworkInterface.getByInetAddress(ip);
byte[] mac = network.getHardwareAddress();
long endTime = System.nanoTime();
long duration = (endTime - startTime);
double seconds = (double)duration / 1000000000.0;
System.out.println("Duration: " +String.valueOf(seconds) + " seconds");
System.out.print("Current MAC address : ");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
sb.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : ""));
}
System.out.println(sb.toString());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (SocketException e){
e.printStackTrace();
}
}
}
NetworkInterface.getByInetAddress(ip)
大约需要20秒。有什么想法吗
java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
javac -version
javac 1.7.0_79
这台机器上的所有Java应用程序都是这样吗?你能提供一个例子来说明这个问题吗?我的机器上可能有一些配置不正确的地方,但是我尝试用python做同样的事情,没有性能问题。我只有java有这个问题。在windows和java8上需要30毫秒。网络接口方法的AIK性能还取决于网络接口的数量和分配给接口的地址。
java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
javac -version
javac 1.7.0_79