Java 스레드: 가비지 수집 여부
이 Java 코드 조각에서는 새 스레드가 생성되고 t.start( ). 그러나 스레드를 시작한 후 스레드 참조 t는 t = null인 null로 설정됩니다. 이는 스레드에 대한 활성 참조 없이 스레드가 가비지 수집되는지 여부에 대한 의문을 제기합니다.
Java의 가비지 수집
가비지 수집기가 Java에서 실행되는 경우 , 프로그램의 활성 부분에서 더 이상 접근할 수 없는 개체를 식별하고 제거합니다. 이 경우 스레드는 계속 실행되는 익명 클래스로 생성됩니다. 메인 스레드의 t 참조가 null로 설정되어 있어도 스레드 자체는 활성 상태로 유지되며 즉시 가비지 수집되지 않습니다.
쓰레드가 활성 상태로 유지되는 이유
A 실행 중인 스레드는 가비지 수집 루트로 간주됩니다. 즉, 가비지 수집기가 도달할 수 있는 것으로 간주됩니다. 스레드가 계속 실행 중인 한 스레드가 참조하는 개체가 가비지 수집되는 것을 방지합니다.
이 경우 스레드는 스택 추적, 스레드 상태 및 스레드 상태와 같은 자체 내부 데이터 구조를 참조합니다. 공유 메모리. 가비지 수집 루트가 됨으로써 스레드는 이러한 내부 객체에 계속 액세스할 수 있도록 보장합니다.
가비지 수집 루트로서의 메인 스레드
마찬가지로 메인 스레드는 가비지 수집 루트. 기본 스레드에 대한 명시적인 참조가 없더라도 여전히 활성 상태로 실행 중입니다. 결과적으로, 자신과 자신이 참조하는 모든 개체가 가비지 수집되는 것을 방지합니다.
결론
따라서 이 코드 조각에서 스레드는 무기한으로 계속 실행됩니다. 가비지 수집 루트로 간주됩니다. 메인 스레드에서 명시적인 참조가 없다는 사실은 활성 상태를 유지하고 참조하는 개체에 접근할 수 있도록 유지하므로 중요하지 않습니다. 가비지 수집기는 스레드가 종료될 때만 스레드를 수집하며 더 이상 가비지 수집 루트로 간주되지 않습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3