HotSpot
| HotSpot | |
|---|---|
| Desenvolvedores | HotSpot Group, OpenJDK |
| Lançamento inicial | abril de 1999 |
| Repositório | Código-fonte |
| Escrito em | C++ |
| Tipo | Máquina virtual Java |
| Licença | GPLv2 |
| Website | Pá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 2 «The HotSpot Group» (em inglês). OpenJDK. Consultado em 31 de julho de 2026
- 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
- ↑ «The CLDC HotSpot Implementation Virtual Machine» (PDF) (em inglês). Sun Microsystems. 2002. p. 5. Consultado em 31 de julho de 2026
- ↑ «JDK Source Structure» (em inglês). OpenJDK. Consultado em 31 de julho de 2026
- 1 2 «Compilation Optimization». JRockit to HotSpot Migration Guide (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
- ↑ «HotSpot Virtual Machine Garbage Collection Tuning Guide». Java Platform, Standard Edition 26 (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
- ↑ «Available Collectors». HotSpot Virtual Machine Garbage Collection Tuning Guide (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
- ↑ «OpenJDK: Shenandoah» (em inglês). OpenJDK. Consultado em 31 de julho de 2026
- 1 2 «Class Data Sharing». Java Platform, Standard Edition 25 (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
- 1 2 «The java Command». Java Development Kit Tool Specifications (em inglês). Oracle Corporation. Consultado em 31 de julho de 2026
- ↑ «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]- Sítio oficial
- «Guia da Máquina Virtual Java» (em inglês)
- «Código-fonte do HotSpot no repositório do JDK» (em inglês)