"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Java Virtual Machine: ciclo de vida e Class Loaders

Java Virtual Machine: ciclo de vida e Class Loaders

Publicado em 2024-11-16
Navegar:824

A Java Virtual Machine (JVM) é o núcleo do ecossistema Java, fornecendo todas as ferramentas essenciais para a execução de código Java. Para compreender plenamente seu funcionamento, é crucial entender o ciclo de vida desse interpretador e as suas implicações para o desempenho e otimização de aplicações Java.

Todo o ciclo de vida da JVM inicia-se com um processo fundamental chamado de "JVM Bootstrapping" que é responsável por construir todo o ambiente de execução e prepará-lo. É nesse contexto que: os argumentos passados na linha de comando são interpretados, o código da JVM é alocado na memória, as estruturas de dados internas da JVM são inicializadas, o gerenciamento de memória se inicia, e por fim a principal thread da aplicação passa a operar. Vamos explorar cada subprocesso descrito nesse parágrafo individualmente:

Os argumentos passados na linha de comando são interpretados

Quando se inicia o programa através da linha de comando, a JVM inicia uma cadeia de processos responsáveis por analisar os argumentos fornecidos, os quais podem incluir parâmetros de inicialização — como por exemplo: -Xms e -Xmx para definir o tamanho mínimo e máximo do heap, área da memória responsável pela alocação e criação de objetos no contexto da aplicação — especificações de debug ou configurações até mesmo do próprio ciclo do Garbage Collector.

Antes de prosseguir, é importante mencionar: com o intuito de simplificação, estaremos analisando o segmento do código que lida com o parsing de argumentos avançados da JVM — os que se iniciam com -XX.

Para se ter mais clareza, vamos utilizar o código open-source da OpenJDK para mais referências. No arquivo arguments.cpp localizado no diretório src/hotspot/share/runtime.arguments.cpp a função que interpreta parâmetros avançados (-XX) pelo CLI é essa:

Java Virtual Machine: ciclo de vida e Class Loaders

Fazendo uma breve análise, a função inicia uma verificação para ver se o argumento passado se inicia com ou -, determinando se a flag for booleana, e também se deve ser desativada ou ativada.

Java Virtual Machine: ciclo de vida e Class Loaders

Depois disso, o código começa a extração do nome da flag. Cada caractere é analisado, se não for alfanumerico ou não for _, ele termina (significando que o nome da flag está completa).

Java Virtual Machine: ciclo de vida e Class Loaders

Depois de fazer as verificações e identificar o nome da flag, o método JVMFlag* flag = find_jvm_flag(name, name_len); finalmente é invocado para ver se há alguma configuração disponível ao que foi fornecido.

Esse é um pequeno resumo de como os argumentos mais avançados da -XX são parseados. É possível encontrar, no entanto, nesse mesmo arquivo que irei citar, os processos de argumentos que se iniciam com -X que passam por outra função de parsing:

Java Virtual Machine: ciclo de vida e Class Loaders

Exemplo da flag: -XMS

Java Virtual Machine: ciclo de vida e Class Loaders

ARTIGO EM CONSTRUÇÃO

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/shyvictor/java-virtual-machine-ciclo-de-vida-e-class-loaders-1ki6?1 Se houver alguma infração, entre em contato com [email protected] para excluí-lo
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3