Jak monitorować wykorzystanie pamięci Java?

Mamy aplikację j2ee działającą na Jboss i chcemy monitorować jej użycie pamięci. Obecnie używamy następującego kodu

    System.gc();
    Runtime rt = Runtime.getRuntime();
    long usedMB = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024;
    logger.information(this, "memory usage" + usedMB);

Ten kod działa poprawnie. Oznacza to, że pokazuje krzywą pamięci, która odpowiada rzeczywistości. Kiedy tworzymy duży plik xml z DB, krzywa idzie w górę, po zakończeniu ekstrakcji spada.

Konsultant powiedział nam, że wywołanie gc () jest jawne, „pozwól jvm zdecydować, kiedy uruchomić gc”. Zasadniczo jego argumenty były takie same jakomówione tutaj. Ale nadal nie rozumiem:

Jak mogę mieć krzywą wykorzystania pamięci?co jest nie tak z wyraźnym gc ()? Nie przejmuję się małymi problemami z wydajnością, które mogą się zdarzyć przy jawnym gc () i które szacowałbym na 1-3%. Potrzebuję pamięci i monitora wątków, który pomaga mi w analizie naszego systemu na stronie klienta.

questionAnswers(13)

yourAnswerToTheQuestion