2016-06-20 4 views
6

사용자 런타임 (freememory() 및 totalmemory() 및 gc()) 클래스가 mb (즉, 1000000 바이트)보다 큰 메모리를 제공합니다.자바 프로그램의 메모리 사용량을 계산하는 방법?

그러나 온라인 컴파일러에서 동일한 코드를 실행하면 kb (즉, 1000 바이트)로 사용되는 메모리가 표시됩니다. 이것은 큰 차이입니다.

이는 런타임이 프로그램에서 사용하는 실제 메모리를 표시하지 않음을 의미합니다.

프로그램에서 사용하는 실제 메모리를 계산해야합니다. 온라인 컴파일러가 프로그램에서 사용하는 메모리를 계산하는 방법은 무엇입니까?

+0

온라인 컴파일러는 무엇입니까? – Onur

+0

일반적으로 응용 프로그램의 성능/메모리 "동작"을 이해해야하는 경우 프로파일 링 도구를주의 깊게 조사해야합니다. 시간이 지남에 따라 관찰하고 싶습니다. 귀하의 질문에 언급 된 것과 같은 전화를 사용하여 한 번 스냅 샷을 찍는 것은 매우 제한된 정보만을 제공 할 수 있습니다. – GhostCat

+0

@ omn codechef.com/ide는 내가 편집을 원했던 하나입니다. –

답변

7

먼저 코드 실행 전에 사용 된 메모리, 즉 코드의 첫 번째 행을 계산하십시오.

long afterUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory(); 

그럼 당신은 할 수 있습니다 :

long actualMemUsed=afterUsedMem-beforeUsedMem; 

그것은 당신에게 당신의 프로그램에 의해 사용되는 실제 메모리를 줄 것이다 -이 :

long beforeUsedMem=Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory(); 

은 당신의 코드 실행 후 사용되는 메모리를 계산합니다.

더 나은 메모리 분석을 위해서는 jvisualvm과 같은 프로파일 러 도구가 가장 좋습니다.

  • 는 Runtime.getRuntime(). totalMemory()는,이 메모리 이 JVM에 사용 가능한 총 메모리인지, 기억하십니까.
  • 자바 -Xms512m -Xmx1024m, 그것은 프로그램 의 총 메모리가 느리게 1,024메가바이트의 최대로드 할 수있다, 512MB로 시작된다는 것을 의미합니다.
  • 따라서 동일한 프로그램을 다른 JVM에서 실행중인 경우 Runtime.getRuntime(). totalMemory()가 다른 결과를 줄 수 있습니다.
+0

메서드가 방대한 양의 임시 개체를 만드는 경우 간단한 빼기가 관련없는 데이터를 생성 할 수 있습니다. 실제 메모리 소비는 모든 중복 객체를 지우는 gc에 달려 있습니다. – ayvango

3

우분투에서 상단 명령을 사용하면 Java 프로그램을 실행하는 동안 % CPU 사용 또는 % 메모리 사용을 확인할 수 있습니다.

top 명령은 많은 정보를 제공합니다. %MEMTIME+ COMMAND

RESSHRS%CPUUSERPRNIVIRT

PIDtop을 입력하고 명령 섹션에서 터미널 & 체크 자바 를 입력했다.

+0

프로그래밍 방식의 솔루션을 원합니다. –

관련 문제