我有以下小代码片段:
InetAddress address = InetAddress.getByName(host);
if(address.isReachable(TIMEOUT_IN_MILLISECONDS)) {
System.out.println(host + " is reachable.");
String hostName = address.getHostName();
System.out.println(hostName);
}
如果找到一台机器,getHostName() 方法将花费相当长的时间来执行。有人可以解释一下原因吗?
最佳答案
来自InetAddress#getHostName()
javadocs , 该方法将执行 reverse hostname lookup .因此,该方法调用的性能取决于 JVM 和目标主机的域名服务器之间的网络/技术堆栈的性能。
简而言之,该方法将进行系统调用以执行反向查找(例如 getaddrinfo(3)
),并且该调用将由操作系统执行以执行通过 Name Server 收集主机信息所需的网络操作。为您的机器配置。
关于Java InetAddress.getHostName() 需要很长时间才能执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10420317/