2010-02-04 5 views
4

많은 방법으로 가비지 수집 된 개체를 명시 적으로 읽었습니다. 그래서 명시 적으로 쓰레기를 수집하는 방법을 알고 싶었습니다.명시 적으로 가비지 수집 할 개체를 만드는 방법

+0

을 ? 거기에 많은 GC 언어가 있으며, 모든 구현은 자체의 비표준 기능을 추가 할 수 있습니다. –

+0

죄송합니다. 하지만 난 단지 하나의 태그, 자바를 선택했습니다. 그것은 자바 언어와 관련된 의미합니다 – GuruKulki

답변

1

System.gc는 가비지 컬렉터를 명시 적으로 실행하도록 JVM에 지시하는 것입니다. 동물성 A = 새로운 동물()

가 EX를 널 (null)로 가리 키도록 지정 참조 :

그러나로서는 내가 명시 가비지 수집 목적을 알고있는 몇 가지 방법으로서

a = null

다른 개체에 대한 참조를 지정합니다. 예 : 동물 a1 = 새 동물(); a1 = 새 Animal();

+2

개체에 대한 모든 참조를 'null'로 할당하면 개체를 가비지 수집 할 준비 만합니다. 즉시 쓰레기를 모으지 않으며 이후에 오랫동안 메모리에 남아있을 수 있습니다. 'System.gc() '를 호출한다고해서 참조되지 않은 모든 객체가 수집되는 것은 아닙니다. 다른 답변을 읽어보십시오. – MAK

6

명시 적 가비지 수집 방법이 없습니다.

System.gc(); 

을 있지만 그 것이다 보장 할 수 없습니다 :

당신은 호출하여 가비지 수집을 할 수있는 가상 머신을 "정중하게 요청"할 수 있습니다.

gc 메소드를 호출하면 Java 가상 머신이 현재 사용중인 메모리를 신속하게 재사용 할 수 있도록하기 위해 사용되지 않은 객체를 재활용하는 데 많은 노력을 기울이고 있음을 알 수 있습니다. 메소드 호출로부터 제어가 돌아 오면 Java Virtual Machine은 폐기 된 모든 객체의 공간을 되찾기 위해 최선의 노력을 다했습니다.

"최선의 노력"은 가비지 수집을 연기하는 것일 수 있습니다. 가비지 컬렉션 개체를 elligible 만드는 방법에 대한

당신은 명시 적으로 null에 대한 모든 참조를 설정하여 가비지 컬렉션 대상 자격을 할 수 Effective Java, Chapter 2

+2

나는 "최선의 노력"이라는 용어를 좋아합니다. 꽤 많이 "어쩌면, 만약 내가 그것을 좋아하는"것을 의미합니다. –

2

를 참조하십시오.

가비지 수집기 자체는 호출하지 않지만 컬렉션이 시작되면이 개체를 수집합니다.

Java 가비지 수집기가 자동으로 자동으로 처리되도록하는 것이 가장 좋습니다. 그것은 아마도 당신이하고 싶었던 것보다 더 좋고 더 효율적일 수있는 지점까지 최적화되었습니다.

1

VisualVM과 같은 도구를 쓰지 않는 한 GC를 강요하는 것에 대해 걱정할 필요가 없습니다.

NetBeans, IntelliJ, VisualVM 및 기타 많은 사람들이 모두 강제로 GC가 아니라 힌트가 될 수 있지만 실제로 강제 적용됩니다. JVMTI를 사용하면 GC를 강제 실행할 수 있습니다.

BUT아니요 다시하고 싶습니다.

사용자 강제로 JVMTI의 ForceGarbageCollection을 사용하는 GC (힌트 아님).

그건 그렇고, 당신은 아마 하지 말아라.은 그것을하고 싶어한다.

당신이 정말로 사실 들어, GC 강제하는 방법 (하지만 아마 안) 알고 싶다면 주제에

신뢰할 수있는 정보 : 언어와 구현 당신이 언급하는 어떤

http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html#ForceGarbageCollection