1. Algoritmo de análise de acessibilidade (pesquisa raiz)
A JVM determina se o objeto sobrevive através da análise de acessibilidade. A idéia básica desse algoritmo é usar uma série de objetos chamados GC Roots como ponto de partida e procurar desses nós. Os caminhos pesquisados são chamados de cadeias de referência. Quando um objeto é conectado às GC Roots sem nenhuma cadeia de referência, é provado que esse objeto não está disponível. Na figura abaixo, objeto object1 , object2 , object3 e object4 estão disponíveis objetos. Embora object5 , object6 e object7 estejam relacionados entre si, eles são inacessíveis às GC Roots , para que sejam julgados como objetos recicláveis.
Na linguagem Java, os seguintes objetos que podem ser usados como raízes GC incluem:
1. Objeto referenciado na pilha da máquina virtual (variáveis locais no quadro da pilha).
2. Objeto referenciado por atributos estáticos de classe na área do método.
3. Objeto referenciado por constantes na área do método.
4. Objeto referenciado pelo JNI (método nativo) na pilha de métodos locais.
2. Código fonte da primavera
spring cria objetos através da classe que implementa a interface BeanFactory , com a seguinte estrutura de implementação:
SimplejndibeanFactory.java
classe pública simplesjndibeanfactory estende Jndilocatorsupport implementa BeanFactory {private final Set <String> shareAbleResources = new HashSet (); // O mapa criado usando o novo é um objeto referenciado na pilha e pode ser usado como um objeto GC ROOTS PRIVADO MAPA FINAL <String, Object> singletonObjects = new Hashmap (); mapa final privado <string, classe <? >> ResourceTypes = new HashMap (); public SimplejndibeanFactory () {this.SetResourceref (true); } public void addSharableReSource (string shareableResource) {this.sharableResources.add (sharableResource); } public void setShareAblerSources (string ... sharableSources) {this.shareableResources.addall (Arrays.aslist (sharableResources)); } public objeto getbean (nome da string) lança beansexception {return this.getbean (nome, object.class); }}StaticListableBeanFactory.java
Classe public staticListableBeanFactory Iplementos listableBeanFactory {private final mapa <string, objeto> Beans; public staticListableBeanFactory () {// O mapa criado usando o novo é um objeto referenciado na pilha, que pode ser usado como um objeto de raízes gc this.beans = new LinkedHashmap (); } public staticListableBeanFactory (map <string, object> Beans) {Assert.NotNull (Beans, "mapa dos feijões não deve ser nulo"); this.beans = feijão; } public void addBean (nome da string, objeto bean) {this.beanS.put (nome, bean); }} A partir do código -fonte acima, podemos ver que o objeto é armazenado em um mapa, onde mapsingletonObjects é usado para armazenar objetos singleton. map singletonObjects e beans (Novo no construtor) são criados diretamente usando a palavra -chave new , que é uma forte referência e atende às condições como objetos GC Roots (objetos referenciados na pilha de máquina virtual (variáveis locais no quadro da pilha). Os objetos criados dessa maneira estão conectados ao GC Roots对no map , então eles não serão reciclados.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo seja de ajuda para o seu estudo ou trabalho. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar.