난 그냥이 기사를 읽어 물체가 invisible
상태에 들어갔을 때 섹션 "A.3.3 보이지 않는"에서 The Truth About Garbage Collection'보이지 않는'물체가 즉시 수집되지 않는 이유는 무엇입니까?
는는 어떻게 설명한다. 아래의 코드에서
변수foo
에 할당 된 객체는
try/catch
블록을 떠난 후
invisible
될 것이며합니다 (
while
루프가 영원히 실행되기 때문에, 결코 일어나지 않을 것이다) remainly 강하게
run
방법이 종료 될 때까지 참조 할 것이다.
public void run() {
try {
Object foo = new Object();
foo.doSomething();
} catch (Exception e) {
// whatever
}
while (true) { // do stuff } // loop forever
}
이 문서에 명시되어이 범위를 벗어나면
그러나, JVM의 효율적인 구현이 제로 기준으로 않을 수 있습니다.
왜 그렇게 효율적이지 않습니까?
이 방법의 스택이 지금 보이지 않는 개체가 하단에있는 네 개의 요소를 포함 말 다음과 같이 설명에서내 시도이다.
개체를 즉시 수집하려면 세 개의 요소를 팝하고 저장 한 다음 네 번째 요소를 팝하고 무시한 다음 세 개의 유효한 요소를 다시 스택으로 푸시해야합니다.
제어 흐름이 run
메서드를 벗어난 후에 보이지 않는 개체를 수집하면 VM은 네 개의 요소를 모두 팝하고 무시할 수 있습니다.
관련없는 코드를 같은 방법으로 혼합하지 않는 것이 좋습니다. 혼동하는 코드는 JVM을 혼란스럽게합니다. –