2012-04-26 2 views
1

Java 응용 프로그램의 현재 메모리 사용량을 계산하고 싶습니다. 그러나 다음 코드를 사용할 때 작업 관리자에 표시된 내용과 큰 차이가 있습니다.Java : 메모리 사용량을 계산할 때 부정확 한 결과

작업 관리자에 따르면, 프로세스가 3.000.000K를 소비하는 경우,이 코드는 예를 들어. 2.015.203을 계산하고 1 초 후에 1.712.296을 계산합니다. 실제로 메모리 사용량이 증가했습니다.

비슷한 질문에 따르면 코드는 잘되어야하지만 작업 관리자와 비교할 때 왜 그렇게 큰 차이가 있습니까?

+0

JVisualVM 보고서는 TaskManager와 다른 점이 있습니까? –

+0

작업 관리자에서보고있는 열은 무엇입니까? 많은 메모리 열이 있습니다. –

+0

왜 알고 싶습니까? 이것은 경박 한 질문이 아닙니다. Java는 매우 정교한 관리 환경이며 거의 모든 상황에서 운영 체제를 조사하여 프로세스 관리를 결정하려고해서는 안됩니다. – kittylyst

답변

6

TaskManager는 java 프로세스 (JVM)에 사용 가능한 모든 메모리를 알려줍니다.

내부적으로 JVM은 프로그램 요구 사항에 따라이 메모리를 관리합니다 (따라서 JVM 내부에는 "자유"메모리가 있지만 TaskMan에게는 사용 된 것처럼 보입니다).

또한 GC는 가장 유용하다고 결정할 때 메모리를 해제합니다. 따라서 더 많은 객체를 생성 한 후에 GC가 이전에 할당 된 (그러나 도달 할 수없는) 메모리를 스윕했기 때문에 사용 된 메모리가 적을 가능성이 매우 높습니다.

관련 문제