2010-02-15 2 views
-4

자동으로 발생합니까? 어떻게 그것을 실행할 수 있습니까?Java에 자동 가비지 수집 기능이 있습니까?

+0

사실이 언어에 대해 더 새로운 사람들은 이와 같은 질문에 답하는 과정에서 실제로 즐기고 배우는 사람들이 많습니다. 사람들이 서로의 상호 작용을 통해 배울 수있는 사람들이 대답하도록이 질문을 그냥 남겨두면 좋을 것입니다. 많은 엔지니어들은 실제로 교육을 통해 배우는 것이이 사이트의 가장 중요한 부분 일 수는 없습니다. –

답변

9

예, 가비지 콜렉트가 자동으로 발생합니다. 수동으로 실행하거나 권장하지 않아야합니다. 가비지 수집의 요점은 그것이 투명해야한다는 것입니다.

참조하십시오

Tuning Garbage Collection with the 5.0 Java[tm] Virtual Machine [BTW, 자바 가비지 컬렉션에 SO 관련 많은 질문이 있습니다]

3

예는 않습니다가. System.gc()을 실행할 수는 있지만 권장하지 않습니다. 또한 여전히 가질 수 있습니다. memory leaks

+2

System.gc()를 실행하는 것이 좋습니다 (반복). 그래서 여기에 몇 가지 토론을 참조하십시오 - http://stackoverflow.com/questions/66540/system-gc-in-java/66692 – JasCav

+0

그 시스템 # GC 일을 실행해야합니까 ... 아니면 그냥 자동으로 발생합니다/ – TIMEX

+0

아무도 릴리스 된 객체에 대한 참조를 보유하지 않는다는 것을 자동으로 감안할 때. System #c를 호출하는 것은 중복적이고 신뢰할 수 없다. – Bostone

2

필요하면 가비지 수집기가 자동으로 수집합니다. 당신이 정말로해야 할 때까지는 아무것도 할 필요가 없습니다.

1

Java 가상 머신에서 데이터 (객체, 프리미티브 배열)는 에 저장되며, 이는 모든 JVM 스레드가 액세스 할 수있는 메모리의 공유 영역입니다. 메모리는 JVM이 시작될 때 힙에 할당됩니다 (구성에 따라 런타임에 특정 제한으로 확장 될 수 있음). 새 오브젝트가 작성 될 때마다 힙의 일부가이를 저장하기 위해 할당됩니다.

힙이 가득 차서 추가 할당을 수행 할 수없는 경우 (이것은 단순화 된 버전이므로 생략 함) 가비지 수집기가 자동으로 메모리 공간을 확보하기 시작합니다. 기본적으로 활성 스레드가 참조하지 않는 객체는 안전하게 할당 해제 될 수 있습니다.

가비지 수집기 스레드는 일반적으로 매우 낮은 프로세스 스레드로 실행되지만 일단 실행되면 작업이 완료 될 때까지 일시 중단 할 수 없습니다.

0

Java에는 자동 가비지 수집이 있습니다. 그러나해야 할 일이 있습니다. Java는 참조가없는 힙의 오브젝트만을 GC합니다. 당신이하는 일은 더 이상 필요하지 않은 변수에 null 값을 할당하고 힙의 메모리를 해제하고자하는 것입니다. 변수에 null을 할당하지 않으면 힙의 객체가 참조를 가지며 더 이상 필요하지 않더라도 메모리 공간을 차지합니다.