Java的InetAddress.getHostName()花费了很长的时间来执行(Java Ine

2019-06-24 03:08发布

我有以下的小的代码片段:

        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);
        }

获取主机名()方法以相当长的一段时间,如果一台机器已经发现执行。 可能有人请解释一下为什么?

Answer 1:

InetAddress#getHostName()的javadocs ,该方法将执行反向主机名查找 。 这样的方法调用的性能取决于JVM和目标主机的域名服务器之间的网络/技术栈的性能。

简而言之,这种方法会使系统调用进行反向查找(如getaddrinfo(3)和呼叫将由操作系统执行通过收集主机信息所需的网络行为来实现的名称服务器的配置适合您机。



Answer 2:

一些地址需要较长的时间才能得到解决。 InetAddress类具有一个缓存来存储成功和不成功的决议。 此外,做一个线程池。 您可以提高性能



Answer 3:

toString()似乎是速度快:

给定的一个InetAddress IA或InterfaceAddress IA,

System.out.println ( ia.toString() )将显示包含你的ip地址的速度比字符串ia.getHostName()

然后,您可以使用ia.toString().substring提取它。

我不知道为什么。



文章来源: Java InetAddress.getHostName() taking a very long time to execute