2009-07-05 17 views

답변

2

는 보장이 없기 때문에 가비지 콜렉션이 일어날 것이라는 보장이 없다는 것을 JVM은 가비지 콜렉션을 지원한다. (나는 JLS에서 전혀 언급하지 않았고 확실히 index에는 없다).

그러나 "나는 보장 할 수 없다"는 생각은 약간 잘못된 것입니다. 태양 API docs에서 : 방법 호출에서 제어 반환, Java 가상 머신이 가 파기 된 객체에서 공간 을 확보하기 위해 최선의 노력을했다

.

그래, 아마도 보장 할 수는 없지만,이 방법을 호출하면 일반 JVM이 GC주기를 실제로 시작한다는 것을 알 수 있습니다. 아마도 일부 JVM은 그렇지 않을 것이며, 아마도 미래의 가비지 컬렉터는 그렇지 않을 것입니다. 그러나 현재로서는 광고되는 것을 수행합니다.

물론 애플리케이션 코드가이 메소드를 호출하는 이유는 거의 없습니다. JVM은 필요할 때 쓰레기를 수집합니다.

+0

사양에서 "최선의 노력"은 특별한 노력이 전혀없는 것으로 해석 될 수 있습니다. –

1

정확한 프로세스는 JVM에 따라 다르며 실제로 많은 연구가 진행되는 영역입니다. 이것은 실제로 일어날 일에 대해 명세가 너무 모호하기 때문에 가능합니다.

원래 Java는 "모든 것을 멈추고 모든 객체를보고 어떤 객체가 아직 살아 있는지 확인"했습니다. 이것은 1) 천천히 그리고 2) 모든 일이 중단되는 동안 중단되었습니다.

오늘날 Sun 기반 JVM은 대부분의 객체가 오래 가지 않기 때문에 여러 개의 객체 풀을 가지고 있으므로 별도의 풀을 많이 사용하지 않아도됩니다. 자바 5의 GC를 조정할 방법에

태양 문서에 어떤 일이 일어나는지에 매우 유익하다 :

http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html

1

정확한 프로세스는 JVM의 버전 및 공급 업체에 따라 다릅니다.

마크와 스윕, 생성 등 다양한 알고리즘이 있습니다. 보통 병렬 스레드로 실행됩니다.

JVM에서 System.gc()disabled을 호출 할 수 있습니다. 그 이유 중 하나는 보장되지 않습니다. IBM의 Java theory and practice: Garbage collection and performance에 대해 자세히 설명하고 에 대해 분명히 보이는 것이 무엇이 있는지 GC가 실제로 번을 수행하면의 성능을 발휘할 수 있습니다. 또한 GC를 구현하는 데 사용되는 많은 알고리즘을 설명합니다.

또한 Sun은 다양한 GC 구현을 Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning에 설명했습니다.

관련 문제