Ir para o conteúdo

HotSpot

Origem: Wikipédia, a enciclopédia livre.
HotSpot
DesenvolvedoresHotSpot Group, OpenJDK
Lançamento inicialabril de 1999
RepositórioCódigo-fonte
Escrito emC++
TipoMáquina virtual Java
LicençaGPLv2
WebsitePágina no OpenJDK

HotSpot, também denominada Java HotSpot Virtual Machine, é uma implementação da Máquina Virtual Java (JVM) que integra o OpenJDK. Seu desenvolvimento e manutenção são coordenados pelo HotSpot Group, grupo da comunidade OpenJDK responsável pelo projeto, implementação e evolução da máquina virtual.[1]

O HotSpot utiliza um interpretador de bytecodes combinado com compilação just-in-time (JIT), otimização adaptativa, gerenciamento automático de memória e diferentes coletores de lixo. A implementação é utilizada no Oracle JDK e em distribuições baseadas no OpenJDK.[2]

História

[editar | editar código]

A tecnologia HotSpot foi lançada pela Sun Microsystems em abril de 1999. Seu desenvolvimento buscava melhorar o desempenho de aplicações Java por meio de técnicas que ultrapassavam a simples compilação imediata de todos os métodos executados.[3]

O nome HotSpot deriva da estratégia de identificar, durante a execução, os pontos do programa utilizados com maior frequência. Esses trechos, denominados hot spots, recebem prioridade para compilação e otimização, enquanto o código pouco executado pode continuar sendo interpretado.[2]

Nas versões antigas da plataforma Java, o HotSpot era disponibilizado em diferentes configurações. A máquina virtual cliente priorizava o tempo de inicialização e o menor consumo de memória, enquanto a versão para servidores priorizava o desempenho após um período maior de execução. Também existiu uma configuração mínima destinada a sistemas com recursos limitados. Nas versões posteriores ao Java 8, apenas a implementação para servidores foi mantida.[2]

O código-fonte do HotSpot integra atualmente o repositório principal do JDK. Sua maior parte é escrita em C++, com componentes específicos para diferentes sistemas operacionais e arquiteturas de processadores.[4]

Execução e compilação adaptativa

[editar | editar código]

Ao iniciar uma aplicação, o HotSpot utiliza um interpretador para executar os bytecodes Java. Durante a execução, a máquina virtual coleta informações sobre os métodos utilizados, os caminhos percorridos pelo programa e outros aspectos de seu comportamento. Os trechos identificados como relevantes para o desempenho podem então ser compilados em código nativo.[2]

A implementação inclui dois compiladores JIT principais:

  • C1, anteriormente conhecido como compilador cliente, que realiza a compilação mais rapidamente e aplica um conjunto menor de otimizações;
  • C2, anteriormente denominado compilador servidor, que necessita de mais tempo e memória para compilar, mas produz código com otimizações mais abrangentes.[5]

Na compilação em níveis ou tiered compilation, os métodos podem passar por diferentes níveis de execução e otimização. O C1 é utilizado inicialmente para produzir código nativo e coletar informações de perfil; métodos que permanecem relevantes podem ser posteriormente recompilados pelo C2 com otimizações adicionais. Essa abordagem procura conciliar menor tempo de inicialização com melhor desempenho durante a execução prolongada.[5]

Entre as otimizações empregadas pelo HotSpot estão a expansão de chamadas de métodos no próprio código chamador, conhecida como inlining, e transformações orientadas pelas informações coletadas durante a execução. Algumas otimizações podem ser desfeitas quando as condições presumidas pelo compilador deixam de ser válidas.[2]

Gerenciamento de memória

[editar | editar código]

O HotSpot administra automaticamente o heap utilizado pelos objetos Java e inclui diferentes algoritmos de coleta de lixo. Cada coletor apresenta características distintas em relação à duração das pausas, uso de processadores, consumo de memória e capacidade de processamento.[6]

Entre os coletores disponíveis estão:

  • Serial GC, que realiza a coleta utilizando uma única thread;
  • Parallel GC, que emprega várias threads e prioriza a capacidade total de processamento;
  • Garbage-First ou G1', coletor incremental e majoritariamente concorrente que procura equilibrar rendimento e duração das pausas;
  • Z Garbage Collector ou ZGC, destinado a reduzir as pausas em aplicações com heaps de diferentes tamanhos.[7]

O OpenJDK também desenvolve o Shenandoah, coletor que executa parte significativa do trabalho simultaneamente à aplicação para reduzir a duração das pausas. O projeto é patrocinado pelo HotSpot Group.[8]

Compartilhamento de dados de classes

[editar | editar código]

O recurso Class Data Sharing (CDS) permite armazenar dados processados de classes Java em um arquivo compartilhado. Durante a inicialização, esse arquivo pode ser mapeado na memória, reduzindo o tempo necessário para carregar classes e permitindo que diferentes processos da máquina virtual compartilhem metadados somente para leitura.[9]

O Application Class-Data Sharing amplia o mecanismo para incluir classes selecionadas das próprias aplicações, além das classes fornecidas pelo JDK.[9]

Diagnóstico e configuração

[editar | editar código]

O comportamento do HotSpot pode ser configurado por opções fornecidas ao comando java. As opções iniciadas por -X são específicas da implementação, enquanto parâmetros avançados iniciados por -XX permitem controlar aspectos como compilação JIT, tamanho do heap, coleta de lixo, diagnóstico e execução em ambientes com recursos limitados.[10]

A máquina virtual oferece mecanismos que permitem a conexão de ferramentas de monitoramento e diagnóstico. Entre os utilitários fornecidos pelo JDK estão jcmd, jstack, jmap e jinfo, utilizados para consultar informações da máquina virtual, examinar threads e analisar o uso da memória.[10]

O módulo jdk.hotspot.agent implementa o HotSpot Serviceability Agent e inclui o comando jhsdb, que pode ser conectado a um processo Java em execução ou utilizado para examinar arquivos de despejo de memória produzidos após uma falha da máquina virtual.[11]

Licenciamento

[editar | editar código]

O código-fonte do HotSpot é distribuído no âmbito do OpenJDK sob a versão 2 da GNU General Public License.[1]

Ver também

[editar | editar código]

Referências

[editar | editar código]

Referências

  1. 1 2 «The HotSpot Group» (em inglês). OpenJDK. Consultado em 31 de julho de 2026
  2. 1 2 3 4 5 «Java Virtual Machine Technology Overview». Java Platform, Standard Edition 26 (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
  3. «The CLDC HotSpot Implementation Virtual Machine» (PDF) (em inglês). Sun Microsystems. 2002. p. 5. Consultado em 31 de julho de 2026
  4. «JDK Source Structure» (em inglês). OpenJDK. Consultado em 31 de julho de 2026
  5. 1 2 «Compilation Optimization». JRockit to HotSpot Migration Guide (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
  6. «HotSpot Virtual Machine Garbage Collection Tuning Guide». Java Platform, Standard Edition 26 (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
  7. «Available Collectors». HotSpot Virtual Machine Garbage Collection Tuning Guide (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
  8. «OpenJDK: Shenandoah» (em inglês). OpenJDK. Consultado em 31 de julho de 2026
  9. 1 2 «Class Data Sharing». Java Platform, Standard Edition 25 (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
  10. 1 2 «The java Command». Java Development Kit Tool Specifications (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
  11. «Module jdk.hotspot.agent». Java Platform, Standard Edition 26 (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026

Ligações externas

[editar | editar código]