Как контролировать использование памяти Java?

У нас есть приложение j2ee, работающее на Jboss, и мы хотим отслеживать использование его памяти. В настоящее время мы используем следующий код

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

Этот код работает нормально. Это означает, что он показывает кривую памяти, которая соответствует действительности. Когда мы создаем большой файл XML из БД, кривая идет вверх, а после завершения извлечения она идет вниз.

alt text

Консультант сказал нам, что явно вызывать gc () неправильно, «пусть jvm решает, когда запускать gc». В основном его аргументы были такими же, какобсуждать здесь. But I still don't understand:

how can I have my memory usage curve? what is wrong with the explicit gc()? I don't care about small performance issues which can happen with explicit gc() and which I would estimate in 1-3%. What I need is memory and thread monitor which helps me in analysis of our system on customer site.

Ответы на вопрос(13)

Ваш ответ на вопрос