1. Algoritmo de análisis de accesibilidad (búsqueda raíz)
JVM determina si el objeto sobrevive a través del análisis de accesibilidad. La idea básica de este algoritmo es usar una serie de objetos llamados GC Roots como punto de partida, y buscar hacia abajo desde estos nodos. Las rutas buscadas se llaman cadenas de referencia. Cuando un objeto está conectado a GC Roots sin ninguna cadena de referencia, se demuestra que este objeto no está disponible. En la figura a continuación, los objetos object1 , object2 , object3 y object4 son objetos disponibles. Aunque object5 , object6 y object7 están relacionados entre sí, no se pueden decir con GC Roots , por lo que se considerará objetos reciclables.
En el lenguaje Java, los siguientes objetos que se pueden usar como raíces GC incluyen:
1. Objeto referenciado en la pila de máquinas virtuales (variables locales en el marco de la pila).
2. Objeto referenciado por los atributos estáticos de clase en el área del método.
3. Objeto referenciado por constantes en el área del método.
4. Objeto referenciado por JNI (método nativo) en la pila de métodos locales.
2. Código fuente de primavera
spring crea objetos a través de la clase que implementa la interfaz BeanFactory , con la siguiente estructura de implementación:
Simplejndibeanfactory.java
La clase pública SimpleJnDibeanFactory extiende jndilocatorsupport implementa beanFactory {private final set <String> shareAleLeSources = new HashSet (); // El mapa creado usando nuevo es un objeto referenciado en la pila y puede usarse como un objeto GC Roots Object Final Map <String, Object> SingletOnObjects = new Hashmap (); Mapa final privado <cadena, clase <? >> ResourCetypes = new Hashmap (); public SimpleJnDibeanFactory () {this.setResourceRef (true); } public void addshareAleLeSource (string shareAleLeReSource) {this.shareAleLeSeurces.Add (ShareAleLeSource); } public void setShareLeReSources (String ... ShareAleLeSources) {this.shareAleLeAssources.addall (Arrays.aslist (ShareAleLeReSources)); } Public Object getBean (nombre de cadena) lanza Beansexception {return this.getBean (name, object.class); }}StaticListableBeanFactory.java
clase pública staticListableBeanFactory implementa listableBeanFactory {Mapa final privado <string, object> beans; public staticListableBeanFactory () {// El mapa creado usando nuevo es un objeto referenciado en la pila, que puede usarse como un objeto GC Roots this.Beans = new LinkedHashMap (); } public staticListableBeanFactory (map <string, object> beans) {afirmo.notnull (frijoles, "el mapa de frijoles no debe ser nulo"); this.beans = frijoles; } public void addBean (nombre de cadena, objeto bean) {this.beans.put (nombre, bean); }} Del código fuente anterior, podemos ver que el objeto se almacena en un mapa, donde mapsingletonObjects se utilizan para almacenar objetos singleton. map singletonObjects y beans (nuevos en el constructor) se crean directamente utilizando la palabra clave new , que es una referencia sólida y cumple con las condiciones como objetos GC Roots (objetos referenciados en la pila de máquina virtual (variables locales en el marco de la pila). Los objetos creados de esta manera se conectan a GC Roots对en map , por lo que no se recitarán.
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo sea de ayuda para su estudio o trabajo. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse.