Pergunta

Recentemente, aprendi sobre cenários que exigem o aquecimento de um aplicativo (com requisitos de alto rendimento) antes de começarem a atender solicitações reais.A lógica por trás disso era permitir que o JIT fizesse sua mágica de desempenho!

Isso é uma norma para aplicativos Java ou geralmente é feito para aplicativos com muita memória (ocupação pesada)?

Foi útil?

Solução

Se você está falando sobre um aplicativo/site de alto tráfego, o JIT é um problema muito menor.O maior problema é aquecer (preencher) todas as camadas de cache que você precisa.Por exemplo regiões ehcache que estão sendo preenchidas a partir do modo de hibernação.Isso ocorre porque as operações relacionadas a IO são ordens de magnitude mais lentas do que qualquer coisa que acontece dentro da CPU (isto é, a menos que você esteja calculando fractais :)

Outras dicas

A questão é: quando você gostaria de saia do seu caminho para fazer isso?

Se você lançar um webapp e ele estiver IMEDIATAMENTE ativo, enquanto você o "aquece", estará adicionando carga extra, o que é contraproducente.O mesmo acontece quando um aplicativo de desktop é iniciado.Não adianta aquecer se o usuário vai começar a usá-lo imediatamente.Ou pior, não permitir que o usuário interaja enquanto você aquece o aplicativo.

Se você implementar um webapp e testar a implantação antes de apontar seus balanceadores de carga para ele, então você já o aqueceu como resultado secundário.

Além de resposta de Cherouvim, posso pensar em alguns outros problemas que exigem aquecimento:

  • Instanciação de objetos (lazy loading, singletons etc.);
  • Alocação de heap (se o seu Xms é menor que o seu Xmx).

Imagino que o sistema operacional também se sintonize com o comportamento de um aplicativo, de modo que as chamadas do sistema operacional também possam ser afetadas por um período de aquecimento.

A maioria dos itens acima (preenchimento de cache, inicialização de objeto) não é específica de Java.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top