1. 접근성 분석 (루트 검색) 알고리즘
JVM은 객체가 접근성 분석을 통해 생존하는지 여부를 결정합니다. 이 알고리즘의 기본 아이디어는 GC Roots 라는 일련의 객체를 시작점으로 사용 하고이 노드에서 아래쪽으로 검색하는 것입니다. 검색 된 경로를 참조 체인이라고합니다. 객체가 기준 체인없이 GC Roots 에 연결되면이 객체를 사용할 수 없음이 증명됩니다. 아래 그림에서 Objects object1 , object2 , object3 및 object4 사용 가능한 객체입니다. object5 , object6 및 object7 서로 관련이 있지만 GC Roots 에는 도달 할 수 없으므로 재활용 가능한 물체로 판단됩니다.
Java 언어로 GC Roots로 사용할 수있는 다음 객체는 다음과 같습니다.
1. 가상 머신 스택 (스택 프레임의 로컬 변수)에서 참조 된 객체.
2. 메소드 영역에서 클래스 정적 속성에 의해 참조 된 객체.
3. 방법 영역에서 상수로 참조 된 객체.
4. 로컬 메소드 스택에서 JNI (기본 메소드)에 의해 참조 된 객체.
2. 스프링 소스 코드
spring 다음 구현 구조와 함께 인터페이스 BeanFactory 구현하는 클래스를 통해 객체를 만듭니다.
SimpleJndibeAnfactory.java
공개 클래스 SimpleJndibeAnfactory 확장 jndilocatorsupport 구현 beanfactory {private final set <string> shareableresources = new Hashset (); // 새를 사용하여 생성 된 맵은 스택에서 참조 된 객체이며 GC Roots 객체 개인 최종 맵 <String, Object> SingletonObjects = new Hashmap (); 개인 최종지도 <문자열, 클래스 <? >> resourcetypes = new Hashmap (); public simplejndibeanfactory () {this.setResourCeref (true); } public void AddShareAblerESource (String ShareAblerESource) {this.shareAblerSources.add (ShareAblerESource); } public void setShareAblerESources (String ... ShareAblerESources) {this.shareAblerSources.Addall (Arrays.AsList (ShareAblerESources)); } public object getBean (문자열 이름)은 beansexception을 던지 셨습니다. }}staticlistablebeanfactory.java
공개 클래스 staticlistablebeanfactory 구현 목록 가능한 비안 요소 {private final map <string, object> bean; public staticListableBeanFactory () {// 새를 사용하여 생성 된 맵은 스택에서 참조 된 객체이며,이 뿌리 객체로 사용할 수 있습니다. } public staticListableBeanFactory (Map <String, Object> Beans) {Assert.Notnull (Beans, "Beans Map은 NULL이어야합니다"); this.beans = 콩; } public void addbean (문자열 이름, 객체 bean) {this.beans.put (이름, bean); }} 위의 소스 코드에서 객체가 맵에 저장되는 것을 알 수 있으며, 여기서 mapsingletonObjects 싱글 톤 객체를 저장하는 데 사용됩니다. map singletonObjects and beans (생성자의 새로운)는 모두 키워드 new 사용하여 직접 생성되며, 이는 강력한 참조이며 GC Roots Objects (스택 프레임의 로컬 변수)에서 참조 된 객체 (스택 프레임의 로컬 변수)와 같이 조건을 충족합니다.이 방식으로 생성 된 객체는 map 에서 GC Roots对에 연결되어 있으므로 Recycled가되지 않습니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용이 귀하의 연구 나 업무에 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다.