26. 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
– Único que 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
30. Endorsed
• Configurado pelo parâ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
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.
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.
São uma forma de fazer ajustes na JVM , e controlar detalhes de seu funcionamento como quantidade de memória
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.
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
Alto indice de mortalidade infantil entre objetos
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
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
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
Ideal para máquinas que possuem processadores de apenas um nucleo
Máquinas com processadores de muitos núcleos
Perde tempo de sincronização
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
Hierarquia de Carregamento
Traz segurança
As aplicações podem criar seus próprios classloaders
Container cria seu próprio class loader carrega classes do lib
E um para cada app (contexto) classes do webinf/lib