Java HotSpot - Dessa você não sabia
Contextualização
Eu estava com um problema de performance em um dos endpoints de uma API Java lá do meu trabalho. O tempo de resposta era sempre imprevisível, variava de 300ms a 4 segundos. Nas primeiras execuções a demora era sempre maior, e ia reduzindo com o tempo, mas depois de algums instantes sem executar nenhum teste, o tempo de resposta voltava a ser 4 segundos. E eu ficava tipo "QUE???".
(É importante lembrar que esses testes eram feitos em ambiente de homologação)
Tentei resolver o problema
Eu li e reli o código várias vezes tentando encontrar possíveis problemas de performance, e nada! Tudo parecia perfeito. Eu até coloquei aqueles cálculos de timestamp nos métodos pra tentar encontrar um gargalo e adivinha? Nada! Estava tudo normal.
Debati esse problema com meu amigo
Estava conversando com ele sobre esse problema, tentando descobrir o que podia ser. Até que ele falou a seguinte frase:
— Pode ser o Java "esquentando"
Na hora eu não entendi, até porque o Java não é um motor que esquenta e melhora o desempenho com o tempo... Foi ai que ele me explicou que a JVM tem um recurso de otimização automática. Ela entende as partes do código mais usadas e já deixa elas "prontas" para a próxima execução, ou seja, quanto mais vezes o código é executado, mais performático ele fica, em outras palavras, o Java "esquenta".
O HotSpot
O nome dessa funcionalidade é Java HotSpot. Ela é uma implementação da JVM projetada pra ganho de desempenho nas aplicações. Pra conseguir fazer isso, ela usa algumas artemanhas como: Compilação Just-in-Time (JIT); Garbage Collection; Profiling; Entre outras.
E isso explica direitinho o motivo do endpoint ficar mais rápido sozinho ao longo do tempo.
Eu achei isso simplismente incrível!!!
E você, o que achou?