O documento discute os principais tópicos da Java Virtual Machine (JVM), incluindo parâmetros da JVM, garbage collection, Just in Time compiler e class loaders.
Carregamento de classes
•Loading -Localiza o arquivo (.class) e carrega seu ByteCode;
• Linking
– Verification -Verifica se o ByteCode está correto;
– Preparation –Prepara estrutura para acomodar métodos,
atributos;
– Resolving –Carrega todas as dependências referenciadas
pela classe;
• Initializing –Blocos estáticos são executados e atributos
estáticos são inicializados;
27.
ClassLoaders
• BootStrap
– Únicoque não possui pai;
– Carrega classes do rt.jar (java.lang);
• Extension
– Tem BootStrap como pai;
– Carrega classes da pasta lib/ext;
• Application
– Tem Extension como pai;
– Carrega classes do CLASSPATH;
BootStrap Classloader
Extension Classloader
Application Classloader
Endorsed
• Configurado peloparâmetro -Djava.endorsed.dirs=;
• Jars carredos antes do diretório ext ;
• Maneira de dizer para JVM que você confia em
determinado jar;
Notas do Editor
#4 Jvm é uma especificação, ela interpreta bytecode converte em comandos de máquina e os executa, isso é o que torna possível escrever um único código e executálo em várias plataformas.
#6 A variedade de jvms existente aumenta também a competitividade no mercado, pois cada fabricante melhora aspectos a cada versão, além de não ficar preso a um fabricante.
#9 São uma forma de fazer ajustes na JVM , e controlar detalhes de seu funcionamento como quantidade de memória
#11 Dificuldade de gerenciamento de memória para os desenvolvedores
Java usa gc
como?
Objeto liberado fica disponível para ser coletado
Porém não dá pra previnir quando ele será coletado.
#12 Quando se pensa em coleta de lixo, primeira coisa que vem na mente é um serviço que varre a memória de tempo em tempo e remove os objetos sem referencia
#13 Alto indice de mortalidade infantil entre objetos
#14 Parece mais custoso pois tem que copiar e apagar.
Apesar de copiar ser custoso, isso é feito em apenas 5% dos objetos
Então não apaga o restante, apenas marca a memória como livre para ser escrita
#15 Na hotSpot a memória é dividida da seguinte maneira.
Os objetos são instanciados no espaço eden, após a primeira collection os objetos sobreviventes são copiados para um dos survivors e a partir de então são copiados entre os 2 survivors até serem considerados maduros.
Em algum momento a old generation tbm se enche, então é necessário executar uma coleta, nesse pedaço de memória o algortimo usado é o M.A.S
#16 Como a gente viu o mark and sweep causa problemas de fragmentação, por isso o algoritmo executado tem mais uma fase chamada compact, que realiza a desfragmentação da memória.
Agumas jvms como jrockit não se preocupam muito com essa fragmentação e executam o compact apenas quando necessário
#18 Ideal para máquinas que possuem processadores de apenas um nucleo
#19 Máquinas com processadores de muitos núcleos
Perde tempo de sincronização
#23 Apenas interpretava bytecode e executava em linguagem de máquina
Muito lenta
Durante a execução do programa análisa e detecta pontos importantes e compila pra código de máquina otimizados
Heuristicas (rollback)
E descartar códigos compilados caso não sejam mais utilizados
#28 Hierarquia de Carregamento
Traz segurança
As aplicações podem criar seus próprios classloaders
#29 Container cria seu próprio class loader carrega classes do lib
E um para cada app (contexto) classes do webinf/lib