Carregamento de classe
O carregamento de classe refere -se à leitura de dados binários da classe. Classe Arquivo na memória, colocando -os na área de métodos da área de dados de tempo de execução e, em seguida, criando um objeto java.lang.class na área de heap para usar encapsular a estrutura de dados da classe na área do método.
Como carregar arquivos .class:
1. Carregar diretamente do sistema local
2. Faça o download do arquivo .class pela Internet
3. Carregar arquivos .Class de zip, jar, etc.
4. Extrair arquivos. Classe do banco de dados proprietário
5. Compilar dinamicamente os arquivos de origem Java em arquivos .class
O produto final do carregamento de classe é um objeto de classe localizado na área da pilha.
O objeto de classe encapsula a estrutura de dados da classe na área do método e fornece aos programadores Java uma interface para acessar a estrutura de dados na área do método.
Existem dois tipos de carregadeiras de classe:
1. O carregador que vem com o virtualizador Java
Carregador de classe raiz (bootstrap)
Carregador de classe de extensão (extensão)
Classe do sistema Carregador ou carregador de aplicativos (sistema)
Os dois últimos carregadores são implementados em Java, e o carregador de classe raiz é escrito em C ++, e os programadores não podem obter essa classe no código Java.
2. Carregador de classe definido pelo usuário
Subclasse de java.lang.classloader
Os usuários podem personalizar o método de carregamento da classe
O carregador de classe não precisa esperar até que uma classe seja usada ativamente antes de carregá -la.
A especificação da JVM permite que os carregadores de classe pré -carreguem uma classe quando esperam que ela seja usada. Relate um erro (LinkageError). Se esta classe não tiver sido usada ativamente pelo programa, o carregador de classe não relatará um erro.
Mecanismo de desinstalação da classe
O ciclo de vida de uma classe.
Quando o objeto de classe que representa a classe de amostra não é mais referenciado, ou seja, não pode ser tocado, o objeto de classe terminará o ciclo de vida, e os dados da classe de amostra na área do método também serão descarregados, terminando assim a vida ciclo da classe de amostra.
Pode -se observar que, quando uma classe termina, seu ciclo de vida depende de quando o objeto de classe que representa termina seu ciclo de vida.
Carregador de relacionamento de referência e objetos de classe:
Na implementação interna do carregador de classe, uma coleção Java é usada para armazenar referências à classe carregada.
Por outro lado, um objeto de classe sempre faz referência ao seu carregador de classe. Ligue para o método getClassLoader () do objeto de classe para obter seu carregador de classe.
Pode -se observar que existe uma relação bidirecional entre a instância da classe e o carregador que a carrega.
Objeto de classe, objeto de classe, objeto de instância de classe:
Uma instância de uma classe sempre se refere ao objeto de classe que representa a classe.
O método getClass () é definido na classe de objeto, que retorna uma referência ao objeto de classe que representa a classe à qual o objeto pertence.
Além disso, todas as classes Java têm uma classe de propriedade estática que faz referência ao objeto de classe que representa esta classe.
Desinstalar a classe
As classes carregadas pelo carregador de classe que acompanham a máquina virtual Java nunca serão desinstaladas durante o ciclo de vida da máquina virtual.
Como mencionado anteriormente, os carregadores de classe que acompanham as máquinas virtuais Java incluem carregadeiras de classe raiz, carregadeiras de classe de extensão e carregadores de classe do sistema.
A própria máquina virtual Java sempre faz referência a esses carregadores de classe, e esses carregadores de classe sempre se referem aos objetos de classe da classe que carregam, para que esses objetos de classe sejam sempre acessíveis.
As classes carregadas por carregadores de classe definidas pelo usuário podem ser descarregadas.
Exemplos específicos
A variável loader1 e a variável OBJ aplicam indiretamente o objeto de classe que representa a classe de amostra, enquanto a variável OBJClass o faz referencia diretamente.
Se as três variáveis de referência no lado esquerdo da figura acima forem definidas como nulas durante a operação do programa, o objeto de amostra termina seu ciclo de vida, o objeto MyClassLoadeler termina seu ciclo de vida e o objeto de classe que representa a classe de amostra também termina sua vida Ciclo.
Quando é necessário novamente, verá o objeto de classe da classe de amostra. será gerado na área de heap da máquina virtual Java.