Programas em Java costumam ter esse problema de “demorar para pegar”, como se fosse um carro com motor frio (a álcool), logo pela manhã.
Você sabe por que isso ocorre?
É que o compilador Java só gera os arquivos .class (que são juntados em arquivos .jar), e o código contido nesses arquivos:
a) Precisa ser carregado para a memória quando são chamados (isso é feito só na hora em que são necessários);
b) Arquivos .class contidos em arquivos .jar levam um certo tempo para serem descompactados;
c) Na primeira vez em que o código de um .class é executado, ele é tipicamente interpretado (em vez de ser compilado), e isso leva ainda mais algum tempinho;
d) E há mais um outro tempo que o Java leva para pegar os bytecodes, depois que foram interpretados, e foi determinado que é necessário transformar os bytecodes em código de máquina. Isso é o tempo da “compilação just-in-time”.
Uma vez que o “motor pegou”, então o Java executa as coisas bem mais rápido, pois está executando código de máquina, exatamente como um programa C++ ou Delphi ou Objective-C. Mas na primeira (ou talvez na segunda ou terceira vez) ele leva algum tempo.