Unix 시스템에서 하나의 Java 프로세스를 실행 중입니다. 응용 프로그램을 중지하려면 쉘 스크립트를 사용하여 프로세스를 종료하기 만하면됩니다. 쓰레기 프로세스를 죽이고 어떻게 정적 변수를Java에서 정적 변수를 수집하는 가비지
를 수집 : 여기
내 질문입니까?메모리 또는 JVM 자체가 즉시이를 수행하도록 각 정적 변수를 null로 설정해야합니까?
Unix 시스템에서 하나의 Java 프로세스를 실행 중입니다. 응용 프로그램을 중지하려면 쉘 스크립트를 사용하여 프로세스를 종료하기 만하면됩니다. 쓰레기 프로세스를 죽이고 어떻게 정적 변수를Java에서 정적 변수를 수집하는 가비지
를 수집 : 여기
내 질문입니까?메모리 또는 JVM 자체가 즉시이를 수행하도록 각 정적 변수를 null로 설정해야합니까?
프로세스가 종료되면 전체 Java 힙이 시스템에 리턴됩니다. 이 시점에서 JVM이 가비지 수집 할 필요가 없습니다.
자바 자체가 가비지 수집을 수행합니다. null로 설정하더라도 JVM이 강제로 가비지 콜렉션을 수행 할 수 없습니다.
유닉스 박스에서 스레드 덤프 (강제 종료 -3)를 강제 실행하면 가비지 수집이 강제 실행됩니다.
정적 변수는 ClassLoader에서 참조하는 Class 객체에 의해 참조됩니다. 따라서 클래스 로더가 수집 할 수있게되면 정적 변수가 따라옵니다.
개체 또는 System.gc()에 null을 할당하면 가비지 수집이 시작되지 않고 가비지 수집 자격이 있음을 나타냅니다. 프로세스를 종료하면 전체 Java 힙이 시스템에 리턴됩니다.
응용 프로그램을 종료하면 전체 JVM이 종료됩니다. 나는 당신이 응용 프로그램을 갑자기 죽일 수 있기 때문에 Klas의 답이 더 적절하다는 것을 알았고 아무런 가비지 콜렉션도 호출되지 않을 것입니다 ... 그래서 당신은 대답이 정말로 충분하지 않거나 충분하지 않습니다. –
예, 동의합니다. 응용 프로그램을 죽일 경우 아무 것도 할 필요가 없습니다. . – metsburg
Java 응용 프로그램은 OS를 실행하는 다른 응용 프로그램 인 JVM을 통해 실행됩니다. 응용 프로그램을 죽이는 것은 OS가 JVM에 의해 점유 된 메모리, 즉 Java 응용 프로그램을 할당 해제 한 후에 JVM 자체를 죽이는 것을 의미합니다.
OS가 메모리를 회수합니다. 죽은 프로세스는 GC를 포함하여 아무 것도 실행할 수 없습니다. – kiheru