2013-10-24 1 views
1

Unix 시스템에서 하나의 Java 프로세스를 실행 중입니다. 응용 프로그램을 중지하려면 쉘 스크립트를 사용하여 프로세스를 종료하기 만하면됩니다. 쓰레기 프로세스를 죽이고 어떻게 정적 변수를Java에서 정적 변수를 수집하는 가비지

를 수집 : 여기

내 질문입니까?

메모리 또는 JVM 자체가 즉시이를 수행하도록 각 정적 변수를 null로 설정해야합니까?

+5

OS가 메모리를 회수합니다. 죽은 프로세스는 GC를 포함하여 아무 것도 실행할 수 없습니다. – kiheru

답변

5

프로세스가 종료되면 전체 Java 힙이 시스템에 리턴됩니다. 이 시점에서 JVM이 가비지 수집 할 필요가 없습니다.

0

자바 자체가 가비지 수집을 수행합니다. null로 설정하더라도 JVM이 강제로 가비지 콜렉션을 수행 할 수 없습니다.

5

유닉스 박스에서 스레드 덤프 (강제 종료 -3)를 강제 실행하면 가비지 수집이 강제 실행됩니다.

정적 변수는 ClassLoader에서 참조하는 Class 객체에 의해 참조됩니다. 따라서 클래스 로더가 수집 할 수있게되면 정적 변수가 따라옵니다.

개체 또는 System.gc()에 null을 할당하면 가비지 수집이 시작되지 않고 가비지 수집 자격이 있음을 나타냅니다. 프로세스를 종료하면 전체 Java 힙이 시스템에 리턴됩니다.

+0

응용 프로그램을 종료하면 전체 JVM이 종료됩니다. 나는 당신이 응용 프로그램을 갑자기 죽일 수 있기 때문에 Klas의 답이 더 적절하다는 것을 알았고 아무런 가비지 콜렉션도 호출되지 않을 것입니다 ... 그래서 당신은 대답이 정말로 충분하지 않거나 충분하지 않습니다. –

+0

예, 동의합니다. 응용 프로그램을 죽일 경우 아무 것도 할 필요가 없습니다. . – metsburg

0

Java 응용 프로그램은 OS를 실행하는 다른 응용 프로그램 인 JVM을 통해 실행됩니다. 응용 프로그램을 죽이는 것은 OS가 JVM에 의해 점유 된 메모리, 즉 Java 응용 프로그램을 할당 해제 한 후에 JVM 자체를 죽이는 것을 의미합니다.

관련 문제