У нас есть приложение j2ee, работающее на Jboss, и мы хотим отслеживать его использование памяти. В настоящее время мы используем следующий код:Как контролировать использование памяти Java?
System.gc();
Runtime rt = Runtime.getRuntime();
long usedMB = (rt.totalMemory() - rt.freeMemory())/1024/1024;
logger.information(this, "memory usage" + usedMB);
Этот код работает нормально. Это означает, что он показывает кривую памяти, которая соответствует действительности. Когда мы создаем большой XML-файл из БД, кривая поднимается, после завершения извлечения она опускается.
Консультант сказал нам, что вызов дс() явно не так, «пусть JVM решает, когда запускать дс». В основном его аргументы были такими же, как disscussed here. Но я до сих пор не понимаю:
- Как я могу использовать кривую использования памяти?
- Что не так с явным gc()? Меня не волнуют небольшие проблемы с производительностью, которые могут возникнуть с явным gc() и которые я буду оценивать в 1-3%. Мне нужен монитор памяти и потоков, который помогает мне в анализе нашей системы на сайте заказчика.
монитор с jvisualvm - дает лучшую статистику. –