2012-10-02 2 views
2

많은 Thread 자바 예제와 Runnable 객체가 작업으로 생성되어 스레드로 전달되었습니다. 이러한 작업에 대한 참조가 없으므로이 작업이 Java에 의해 가비지 수집되지 않는 이유는 무엇입니까? 가비지 수집 및 여기서 잘못된 질문을하고 있습니까? 귀하의 소중한 의견을 나누십시오.Runnable은 Java에서 가비지 수집되지 않습니다

+4

어떻게 당신은 그들이 수집 한 쓰레기 없다는 것을 알고 있습니까? – nneonneo

+0

@nneonneo 나는 +1과 같은 질문을하고 싶다. 좋아, 한 번 더 : '쓰레기 수거를하지 않는 것을 어떻게 알 수 있니?' – Elbek

+0

@elbek이 부분을 테스트하지는 않았지만 논리적으로는 가비지 수집 중이라면 아무 것도 작동하지 않을 것이고 눈에 보이는 것보다 더 많은 것이 있어야한다는 결론을 내 렸습니다. – AKS

답변

3

개체에 대한 명시 적 참조가 없다고해서 내부 JVM 개체가 개체를 보유하지 않는다는 의미는 아닙니다.

는 예를 보자이보기의 개발자 관점에서 그것에 대한 언급은 없지만 내부적으로 프레임이 구성 요소의 목록이

frame.add(new JButton("foobar")); 

. 이것은 스레드에서 발생하는 것이므로 내부 스케줄러는 스레드에 대한 참조를 확실히 유지해야합니다. 스케줄러에서 출시 된 바로 그 때

스레드 자체가 쓰레기 수집됩니다 (더 참조 효과적으로 더 이상에 존재하지 않는 정도로)

관련 문제