최근 프로젝트에서 이상한 메모리 누수 문제가 있습니다. 나는 '핸들러'코드에 메시지를 보내는 'main'코드를 가지고있다. 전달되면 핸들러 코드는 고정 된 작업을 수행하고 그 결과를 디스크에 쓴 다음 종료합니다. 고정 작업은 다른 클래스의 특정 함수를 호출하여 수행됩니다.Java : 스레드 종료 후 힙이 회수되지 않습니다.
이 함수를 실행하는 동안 힙 크기가 증가합니다 (예상대로). 그러나 코드가 완료되면 결과 자체가 많은 공간을 차지해서는 안됩니다. 핸들러 호출이 완료되어 메모리 사용량이 적을 것으로 예상됩니다. 그러나 'top'은 핸들러가 여전히 많은 양의 메모리 (RES)를 소비 함을 보여줍니다.
스레드가 종료 할 때 스레드가 소비 한 힙을 회수해야합니까? System.gc() 호출을 함수의 실행을 게시하려고했지만 가비지 수집을 강제로 수행하지 않습니다.
+1 전혀 아닐 경우. 이 메모리는 JVM의 다른 부분에서 사용할 수 있지만 대부분 OS로 반환하지는 않습니다. – Gray