Java InetAddress.getHostName()需要很长时间才能执行
我有以下小代码片段:
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 ,该方法将执行反向主机名查找 。 因此,该方法调用的性能取决于JVM与目标主机的域名服务器之间的网络/技术堆栈的性能。
简而言之,该方法将进行系统调用以执行反向查找(例如getaddrinfo(3)
),并且该调用将由操作系统实现,以执行通过为您配置的名称服务器收集主机信息所需的网络操作机。
一些地址需要更长的时间来解决。 InetAddress有一个缓存来存储成功和不成功的分辨率。 另外,创建一个线程池。 您可以提高性能
toString()
似乎更快:
给定InetAddress ia或InterfaceAddress ia,
System.out.println ( ia.toString() )
将显示一个包含你的ia.getHostName()
的字符串比ia.getHostName()
更快
然后,您可以使用ia.toString().substring
来提取它。
我不知道为什么。