czwartek, 30 czerwca 2011

Java: pomiar użycia pamięci

Wracamy do misji tego bloga. Ostatnio aż za dużo było pisania o tematach nawet nie do końca około informatycznych, więc czas nieco nadrobić. Blog ten miał dostarczać przede wszystkim rozwiązań problemów, których odszukanie mnie zajęło sporo czasu. Co ważne większość tych rozwiązań było przeze mnie znalezionych przede wszystkim na stronach niepolskojęzycznych. Zdaje mi się, że któryś temat kiedyś pochodził ze strony w języku rosyjskim. To musiałem być zdesperowany.

Dzisiaj rozwiązanie problemu pobrania informacji na temat ilości pamięci użytej przez naszą aplikację. Do pary kiedyś opisałem kwestię pomiaru czasu w języku Java (co na dodatek zapoczątkowało pewną serię).

Problem trudny nie jest, ale jak wiele może być rozwiązany na kilka sposobów. Nie mówię, że to rozwiązanie jest najlepsze, jednak dało całkiem niezłe wyniki gdy musiałem kiedyś podać informacje na temat złożoności pamięciowej pewnego problemu.

Aby zmierzyć aktualnie użytą ilość pamięci w bajtach użytą przez naszą aplikację wystarczy pobrać ją poprzez poniższą linię:

int size = Runtime.getRuntime().totalMemory()-Runtime.getRuntime().freeMemory();
Pojawia się tutaj jeden mały problem. Problemem tym jest Garbage Collector, którego zapuszczenie ma wpływ na rozmiar wolnej pamięci w JVM. Rada jest taka, aby zawsze przed pobraniem informacji o pamięci wywołać jawnie

System.gc();
Trzeba też zawsze pamiętać co nas tak na prawdę interesuje. Jeśli chcemy pobrać info o całej aplikacji, ten kod właśnie się do tego nada. Może być konieczne pobranie info wyłącznie o pewnym fragmencie, gdzie ładowane jest sporo danych. Wtedy zdecydowanie konieczne jest pobranie informacji o pamięci przed i po wykonaniu operacji i porównanie tych danych ze sobą. Ze swojego doświadczenia dodam jeszcze, że warto robić to w głównym wątku aplikacji.

Czytaj też:

Brak komentarzy:

Prześlij komentarz