1. АЛГОРИТМ АНАЛИЗ АНАЛИЗ ДОСТУПА (РУЧЕЙ ПОИСК)
JVM определяет, выживает ли объект посредством анализа доступности. Основная идея этого алгоритма состоит в том, чтобы использовать серию объектов, называемых GC Roots в качестве отправной точки, и искать вниз из этих узлов. Поиск по пути называются эталонными цепочками. Когда объект подключен к GC Roots без каких -либо эталонных цепочек, доказано, что этот объект недоступен. На рисунке ниже объекты object1 , object2 , object3 и object4 являются доступными объектами. Хотя object5 , object6 и object7 связаны друг с другом, они недоступны для GC Roots , поэтому они будут считаться, чтобы они были пригодными для переработки объектов.
На языке Java следующие объекты, которые можно использовать в качестве корней GC, включают:
1. Объект, на который ссылаются в стеке виртуальных машин (локальные переменные в кадре стека).
2. Объект, на который ссылаются статические атрибуты класса в области метода.
3. Объект, на который ссылаются постоянные в области метода.
4. Объект, на который ссылаются JNI (нативный метод) в локальном стеке методов.
2. Spring Source Code
spring создает объекты через класс, который реализует интерфейс BeanFactory , со следующей структурой реализации:
Simplejndibeanfactory.java
Public Class SimpleJndibeanFactory Extends jndiLocatorsupport реализует BeanFactory {Private Final Set <String> shareBlerSources = new HashSet (); // Карта, созданная с использованием нового объекта, упомянутый в стеке и может использоваться в качестве объекта GC CORET Private Final Map <String, Object> SingletonObjects = new HashMap (); Приватная окончательная карта <строка, класс <? >> resourceTypes = new HashMap (); public simplejndibeanfactory () {this.setresourceref (true); } public void AddShareablerSource (String shareablerSource) {this.ShareblerSources.Add (shareableresource); } public void setShareablerSources (String ... shareablerSources) {this.sharebleresources.addall (arrays.aslist (shareableresources)); } public Object getBean (String name) Throws Beansexception {return this.getbean (name, object.class); }}Staticlistablebeanfactory.java
открытый класс staticlistablebeanfactory реализует SirefableBeanFactory {Private Final Map <String, Object> Beans; public staticListableBeanFactory () {// Карта, созданная с использованием нового объекта, упомянутый в стеке, который можно использовать в качестве объекта GC Roots This.beans = new LinkedHashmap (); } public StaticListableBeanFactory (map <string, Object> Beans) {assert.notnull (бобы, "Карта бобов не должна быть нулевой"); this.beans = бобы; } public void AddBean (String name, Object Bean) {this.beans.put (name, bean); }} Из приведенного выше исходного кода мы видим, что объект хранится на карте, где для хранения объектов Singleton используются mapsingletonObjects . map singletonObjects и beans (новые в конструкторе) создаются непосредственно с использованием new слова, которое является сильным эталом и соответствует условиям как объекты GC Roots (объекты, на которые ссылаются в стеке виртуальных машин (локальные переменные в кадре стека). Объекты, созданные таким образом, связаны с GC Roots对в map , поэтому они не будут переработаны.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи поможет вашему обучению или работе. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения.