자바에서는 객체가 살아 여부를 확인하는 방법

1. 레퍼런스 카운팅

引用计数器法:每个对象设置一个引用计数器,当对象被引用,计算器加1,当引用失效,计算器减一。当计数器为0时,
表示引用失效,也就是"死对象",可以被垃圾回收机制回收。
缺陷:无法解决循环依赖的问题。有两个对象A、B。当A引用B,B引用A时,那么此时A、B对象都不为0,垃圾回收机
制无法被回收。

2. 도달 알고리즘 (참조 체인 방법)

从GCRoot开始向下搜索,如果一个对象没有与任何引用链相连时,表示这个对象是垃圾对象,
可以被垃圾回收机制回收。
GC Roots的对象:
虚拟机栈中的引用对象
方法区类静态引用对象
方法区常量池引用对象
本地方法栈JNI引用的对象

참고 : 알고리즘은 객체가 쓰레기 개체이지만, 객체가 쓰레기 재활용 할 수 없습니다 여부를 결정 할 수 있지만. 객체가 도달 할 수없는 GC 루트 인 경우, 객체는 즉시 복구 할 수 없지만, 이마르크 통과하는 실제 필요성의 회복 단계에 대한 집행 유예. 객체가 체인의 GC 루트와 도달 분석에서 참조되지 않는 경우, 시간 조건이 파이널 라이즈 () 방법을 수행 할 필요가 있는지 여부이다 스크리닝 상기 제 1 마크하고 스크리닝을 실시한다. 파이널 라이즈 () 메소드가 호출 또는 가상 머신되면 물체가 포함되지 않으며, 그 필요는 없다.
객체가 파이널 라이즈 () 방법을 수행 할 필요가있는 경우, 그 객체는 스레드가 낮은 우선 순위이고, 큐로 불리는 F-큐 가상 트리거 실행할 파이널 라이즈 () 스레드를 배치하고, 가상 될 가 완료 될 때까지 실행하는 기계가 약속이 기다리고있다되지 않습니다, 그것은 마무리 () 또는 교착 상태의 느린 구현이 발생하는 것처럼, 그것은 F-큐 큐, 대기 메모리 복구 시스템의 붕괴를 초래 한 초래할 것이다. GC F 큐 오브젝트가 표시된 초이고, 그 후, 객체가 제거 될 집합 대기 회수 "회복".

조건은 가비지 수집을 트리거

정상적인 상황은 가상 머신이 유휴 상태 또는 힙 메모리의 현재 부족 인 경우에만 실행되지 않습니다에서, 모든 객체에 의해 참조 및 재활용에 컬렉션에 추가되지 않습니다 스윕 표면, 재활용 실행을 트리거합니다 .

게시 77 개 원래 기사 · 원 찬양 39 ·은 80000 +를 볼

추천

출처blog.csdn.net/qq_33824312/article/details/105125735