5

次の小さなコード スニペットがあります。

        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() メソッドの実行にかなりの時間がかかります。誰かが理由を説明してもらえますか?

4

3 に答える 3

11

InetAddress#getHostName()javadocs から、そのメソッドはホスト名の逆引きを実行します。したがって、そのメソッド呼び出しのパフォーマンスは、JVM とターゲット ホストのドメイン ネーム サーバー間のネットワーク/テクノロジー スタックのパフォーマンスに依存します。

簡単に言うと、そのメソッドは逆引き参照 (例: ) を実行するためのシステム コールを作成し、その呼び出しはオペレーティング システムによって実装され、マシン用に構成されたネーム サーバーgetaddrinfo(3)を介してホスト情報を収集するために必要なネットワーク アクションを実行します。

于 2012-05-02T19:30:53.787 に答える
1

一部のアドレスは解決に時間がかかります。InetAddress には、成功した解決と失敗した解決を格納するためのキャッシュがあります。また、スレッドプールを作成します。パフォーマンスを向上させることができます

于 2012-05-02T19:33:23.430 に答える