Java 스레드: 가비지 수집 여부
이 Java 코드 조각에서는 새 스레드가 생성되고 t.start( ). 그러나 스레드를 시작한 후 스레드 참조 t는 t = null인 null로 설정됩니다. 이는 스레드에 대한 활성 참조 없이 스레드가 가비지 수집되는지 여부에 대한 의문을 제기합니다.
Java의 가비지 수집
Java에서 가비지 수집기가 실행되는 경우 , 프로그램의 활성 부분에서 더 이상 접근할 수 없는 개체를 식별하고 제거합니다. 이 경우 스레드는 계속 실행되는 익명 클래스로 생성됩니다. 메인 스레드의 t 참조가 null로 설정되어 있어도 스레드 자체는 활성 상태로 유지되며 즉시 가비지 수집되지 않습니다.
쓰레드가 활성 상태로 유지되는 이유
A 실행 중인 스레드는 가비지 수집 루트로 간주됩니다. 즉, 가비지 수집기가 도달할 수 있는 것으로 간주됩니다. 스레드가 계속 실행 중인 한 스레드가 참조하는 개체가 가비지 수집되는 것을 방지합니다.
이 경우 스레드는 스택 추적, 스레드 상태 및 스레드 상태와 같은 자체 내부 데이터 구조를 참조합니다. 공유 메모리. 스레드는 가비지 수집 루트가 됨으로써 이러한 내부 개체에 계속 액세스할 수 있도록 보장합니다.
가비지 수집 루트로서의 메인 스레드
마찬가지로, 메인 스레드는 가비지 수집 루트. 기본 스레드에 대한 명시적인 참조가 없더라도 여전히 활성 상태로 실행 중입니다. 결과적으로 스레드는 자신과 참조하는 모든 개체가 가비지 수집되는 것을 방지합니다.
결론
따라서 이 코드 조각에서 스레드는 다음과 같이 무기한으로 계속 실행됩니다. 가비지 수집 루트로 간주됩니다. 메인 스레드에서 명시적인 참조가 없다는 사실은 활성 상태를 유지하고 참조하는 개체에 접근할 수 있도록 유지하므로 중요하지 않습니다. 가비지 수집기는 스레드가 종료될 때만 스레드를 수집하며 더 이상 가비지 수집 루트로 간주되지 않습니다.
위 내용은 Java에서 해당 참조가 Null로 설정되면 스레드 가비지가 수집됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!