¿Cómo monitorear el uso de la memoria Java?

Tenemos una aplicación j2ee que se ejecuta en Jboss y queremos monitorear su uso de memoria. Actualmente utilizamos el siguiente código

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

Este código funciona bien. Eso significa que muestra la curva de memoria que corresponde a la realidad. Cuando creamos un archivo xml grande a partir de una base de datos, una curva aumenta, una vez finalizada la extracción, se reduce.

Un consultor nos dijo que llamar a gc () explícitamente es incorrecto, "deje que jvm decida cuándo ejecutar gc". Básicamente sus argumentos fueron los mismos queaquí discutido. Pero todavía no entiendo:

¿Cómo puedo tener mi curva de uso de memoria?¿Qué está mal con el gc () explícito? No me importan los pequeños problemas de rendimiento que pueden ocurrir con gc () explícito y que estimaría en 1-3%. Lo que necesito es un monitor de memoria e hilo que me ayude a analizar nuestro sistema en el sitio del cliente.

Respuestas a la pregunta(13)

Su respuesta a la pregunta