As pesquisas de DNS reverso no Windows bloqueiam por vários segundos para endereços IP não resolvíveis

Eu estou usando JavaInetAddress.getHostName() para executar algumas pesquisas reversas de DNS e algo parece errado com o tempo que leva. Aqui está um trecho de código:

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

E aqui está a saída na minha máquina:

    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

A resolução de 10.0.0.138 e 216.239.49.245 leva 4,5 segundos cada, independentemente do número de vezes que eu executei esse código. Isso parece acontecer com todos os endereços IP não resolvidos.

Este não é um problema de rede, pois, de acordo com uma captura do wireshark, as consultas DNSnem são enviados quando este código é executadoa menos que o cache DNS seja limpo primeiro (e os resultados são ainda mais lentos - cerca de 4,7 segundos por resolução).

Então, na verdade, o Java leva 4,5 segundos para atingir o tempo limite no cache DNS local do sistema operacional? Isso não faz sentido. O utilitário de linha de comandonslookup retorna resultados (não resolvíveis) para esses endereços IP muito mais rapidamente e nem sequer usa o cache!

Alguém pode explicar esse comportamento e sugerir uma maneira de acelerar essas resoluções? A única coisa em que consigo pensar sem recorrer a bibliotecas externas é usar vários threads, pelo menos o tempo limite de 4,5 segundos será executado em paralelo.

Para referência, estou usando o JDK 7u71 no Windows 7 x64

Edit1: este pergunta parece relevante, mas a resposta não diz que o desempenho depende da rede, que não é o que eu observei.

Edit2:

Este parece ser um problema do Windows. Uma máquina na mesma LAN, que usa exatamente o mesmo DNS, executando o OpenSuse 13.1 com JDK 1.7u67, retornou os seguintes resultados:

Sem cache do 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

Com cache de 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:

Eventualmente, eu tive que contornar o problema fazendo minhas próprias pesquisas reversas no DNS usandodnsjava.

questionAnswers(1)

yourAnswerToTheQuestion