A maioria dos sistemas operacionais e alguns hardwares também mantêm um cache de disco. A primeira leitura é do disco real e lenta, mas as leituras subseqüentes vêm do cache mais rápido.
Estou medindo minha velocidade HDD com um programa auto-escrito. (Esse é um tipo de lição de casa, então não preciso de recomendações sobre ferramentas existentes para fazer isso).
Eu faço isso com o seguinte trecho de código:
for(int attemptNumber =0; attemptNumber < ATTEMPTS; attemptNumber++) {
long start = System.currentTimeMillis();
BufferedReader bf = new BufferedReader(new FileReader(FILENAME));
int c = 0;
while((c = bf.read()) != -1) {
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
Na saída, o primeiro número é geralmente 3 vezes maior que qualquer um dos seguintes:
14234
5130
4859
... etc
Quando eu reinicio o aplicativo, obtenho os mesmos resultados: a primeira leitura é ~ 3 vezes mais lenta. Por que isso está acontecendo?
EDIT: Não tenho certeza se este é o site SO correto para perguntar, onde devo postar isso?
Tags performance java