Обратный просмотр DNS в блоке Windows в течение нескольких секунд для неразрешимых IP-адресов

Я использую JavaInetAddress.getHostName() выполнить некоторые обратные поиски DNS, и кажется, что со временем что-то не так. Вот фрагмент кода:

public static void main(String[] args) throws IOException {

byte[][] addresses = new byte[][] { { 10, (byte) 0, (byte) 0, (byte) 138 }
    , new byte[] { (byte) 216, (byte) 239, (byte) 49, (byte) 245 }
    ,{ 8, (byte) 8, (byte) 8, (byte) 8 } };

    for (byte[] addr : addresses) {
        InetAddress inet = InetAddress.getByAddress(addr);
        long before = System.currentTimeMillis();
        String hostName = inet.getHostName();
        System.out.printf("%20s %40s %5d\n", inet.getHostAddress(), hostName, (System.currentTimeMillis() - before));
    }
}

И вот вывод на моей машине:

    10.0.0.138                               10.0.0.138  4503
216.239.49.245                           216.239.49.245  4591
       8.8.8.8           google-public-dns-a.google.com     8

Разрешение 10.0.0.138 и 216.239.49.245 занимает 4,5 секунды, независимо от того, сколько раз я запускал этот код. Кажется, это происходит со всеми неразрешимыми IP-адресами.

Это не проблема сети, так как в соответствии с перехваченной проволокой, DNS-запросыдаже не отправлены когда этот код запускаетсяесли кеш DNS не очищен первым (а затем результаты еще медленнее - около 4,7 секунды на разрешение).

Так что же на самом деле занимает 4,5 секунды в Java для тайм-аута в локальном DNS-кэше ОС? Это бессмысленно. Утилита командной строкиnslookup возвращает (неразрешимые) результаты для этих IP-адресов гораздо быстрее, и он даже не использует кеш!

Может кто-нибудь объяснить это поведение и предложить способ ускорить эти решения? Единственное, о чем я могу подумать, не обращаясь к внешним библиотекам, - это использовать несколько потоков, поэтому по крайней мере 4,5 секунды будет выполняться параллельно.

Для справки, я использую JDK 7u71 на Windows 7 x64

Edit1: это Вопрос кажется актуальным, но ответ там говорит о том, что производительность зависит от сети, а это не то, что я наблюдал.

Edit2:

Кажется, это проблема Windows. Машина в той же локальной сети, которая использует тот же DNS, на котором запущен OpenSuse 13.1 с JDK 1.7u67, дал следующие результаты:

Без кеширования DNS:

10.0.0.138                                   10.0.0.138  116             
216.239.49.245                           216.239.49.245  5098             
8.8.8.8                  google-public-dns-a.google.com  301

С кешированием DNS:

10.0.0.138                                   10.0.0.138  5
216.239.49.245                           216.239.49.245  9             
8.8.8.8                  google-public-dns-a.google.com  40

Edit3:

В конце концов мне пришлось обойти эту проблему, выполнив свой собственный обратный поиск DNS, используяdnsjava.

Ответы на вопрос(1)

Ваш ответ на вопрос