【问题标题】:Java InetAddress.getHostName() taking a very long time to executeJava InetAddress.getHostName() 需要很长时间才能执行
【发布时间】:2012-05-02 19:25:19
【问题描述】:

我有以下小代码sn-p:

        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() 方法需要相当长的时间来执行。有人可以解释一下原因吗?

【问题讨论】:

  • 在您的情况下,“相当一段时间”是多长时间?

标签: java inetaddress


【解决方案1】:

InetAddress#getHostName() javadocs,该方法将执行reverse hostname lookup。因此,该方法调用的性能取决于 JVM 和目标主机的域名服务器之间的网络/技术堆栈的性能。

简而言之,该方法将进行系统调用以执行反向查找(例如getaddrinfo(3)),并且该调用将由操作系统执行以执行通过Name Server收集主机信息所需的网络操作为您的机器配置。

【讨论】:

    【解决方案2】:

    有些地址需要更长的时间才能解决。 InetAddress 有一个缓存来存储成功和不成功的解决方案。另外,制作一个线程池。您可以提高性能

    【讨论】:

      【解决方案3】:

      toString() 似乎更快:

      给定一个 InetAddress ia 或 InterfaceAddress ia,

      System.out.println ( ia.toString() ) 将比ia.getHostName() 更快地显示包含您的 ipAddress 的字符串

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

      我不知道为什么。

      【讨论】:

        猜你喜欢
        • 2012-12-03
        • 2011-03-14
        • 2021-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-12
        相关资源
        最近更新 更多