2016-06-20 34 views
6

Jeśli I użytkownika klasy Runtime (freememory() i totalmemory() i gc()), to daje mi pamięć powyżej mb (tj. 1000000 bajtów).Jak obliczyć wykorzystanie pamięci programu java?

Ale jeśli uruchomię ten sam kod na dowolnym kompilatorze online, to pokażą pamięć używaną w kb (czyli 1000 bajtów). To ogromna różnica.

Oznacza to, że środowisko wykonawcze nie pokazuje rzeczywistej pamięci używanej przez program.

Potrzebuję obliczyć rzeczywistą pamięć używaną przez program. W jaki sposób kompilatory online używają do obliczania pamięci używanej przez program?

+0

Który kompilator online? – Onur

+0

Ogólnie: jeśli chcesz zrozumieć "zachowanie" wydajności/pamięci swojej aplikacji, musisz poważnie zajrzeć do narzędzi profilowania. Chcesz obserwować z biegiem czasu. Jednorazowe migawki za pomocą połączeń podobnych do tych wymienionych w pytaniu mogą dostarczyć tylko bardzo ograniczonych informacji. – GhostCat

+0

@Onur codechef.com/ide to taka, której szukałem. –

Odpowiedz

7

Najpierw oblicz pamięć używaną przed wykonaniem kodu, tj. Pierwszą linię kodu.

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

Oblicz pamięć używaną po wykonanie kodu: -

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

Następnie można zrobić:

long actualMemUsed=afterUsedMem-beforeUsedMem; 

To daje rzeczywistą pamięć wykorzystywana przez program.

Do dalszej analizy pamięci najlepiej jest użyć dowolnego narzędzia do profilowania, takiego jak jvisualvm.

  • Czy pamiętasz, że Runtime.getRuntime(). TotalMemory(), to pamięć jest ilość pamięci dostępna dla JVM.
  • java -Xms512m -Xmx1024m, oznacza to, że łączna pamięć programu rozpocznie 512MB, która może leniwie załadowanego do max 1024MB.
  • Więc jeśli używasz tego samego programu, na różnych maszynach JVM, Runtime.getRuntime(). TotalMemory() może dawać różne wyniki.
+0

Jeśli metoda tworzy ogromną ilość tymczasowych obiektów, proste odejmowanie może powodować powstanie nieistotnych danych. Rzeczywiste zużycie pamięci zależy od gc, który usuwa wszystkie zbędne obiekty. – ayvango

3

Można użyć polecenie top w ubuntu do sprawdzenia% użycie procesora lub pamięci typu% wykorzystania podczas uruchamiania programu Java.

Główne polecenie da Ci wiele informacji.

PIDUSERPRNIVIRTRESSHRS%CPU%MEMTIME+ COMMAND

wpisz top i wciśnij enter w terminalu & wyboru Java w sekcji poleceń.

+0

Chcę programowe rozwiązanie –

Powiązane problemy