2016-06-22 1 views
0

MemoryMXBean을 사용하여 런타임 메모리 분석과 관련하여 흥미로운 효과가 있습니다. NonHeap과 함께 힙의 사용 가능한 메모리를 결정하고 싶습니다. 그래서 내 코드는 다음과 같습니다 Java MemoryMXBean 사용 된 메모리가 Max보다 큼

static MemoryMXBean mbean = ManagementFactory.getMemoryMXBean(); 
long fullused = mbean.getHeapMemoryUsage().getUsed() + mbean.getNonHeapMemoryUsage().getUsed(); 
long fullmax = mbean.getHeapMemoryUsage().getMax() + mbean.getNonHeapMemoryUsage().getMax(); 
long fullfree = fullmax - fullused; 

때때로 fullFree에 대한 결과가 음의 값이다. 어떻게 그럴 수 있습니까? 사용 된 mem에 대한 계산 후에 일부 가비지 수집이 수행 된 경쟁 조건이 있습니까? 내 기록에서는 꽤 자주 볼 수 있으므로 경쟁 조건 이론을 의심합니다. 다른 의견이 있으십니까?

답변

0

NonHeap의 최대 값은 -1 일 수 있습니다. 애플리케이션의 jconsole을 통해 확인할 수 있습니다. 핫스팟 소스에서 메모리 사용량 계산은 jmm_GetMemoryUsage 방법으로 수행됩니다. 비 힙 메모리 풀 중 하나에 최대 크기가 정의되지 않은 경우 전체 비 힙의 최대 크기가 -1이됩니다. 메타 공간 풀 (MaxMetaspaceSize 명령 플래그 제외) 최대 크기가 정의되지 않았습니다.

+0

고맙습니다. – magicroomy

관련 문제