usar new icon example codigo java memory profiling profile

new - ¿La mejor forma de usar perfiles de memoria en una aplicación Java?



set border jpanel java (9)

Me doy cuenta de que preguntas similares han sido formuladas aquí antes en SO, pero permítanme describir exactamente lo que debo hacer:

Tengo un conjunto de pruebas que ejecutan una aplicación Java de línea de comandos y me gustaría agregarles perfiles de memoria. Una opción que veo sería agregar código (posiblemente usando herramientas / bibliotecas de terceros) a mi aplicación que proporcionaría una instantánea de memoria. Otra opción sería usar una herramienta de terceros que administre / instrumente mi aplicación y la JVM (y, idealmente, no requiere que cambie mi código). Estoy pensando en algo como Valgrind pero para Java. También fuente abierta si es posible.

Lo que realmente me gustaría hacer es configurar las pruebas de memoria para que el uso de la memoria se monitoree a intervalos regulares, digamos cada segundo, y se vierte en un archivo de texto. De esa forma, podría ver si el uso de la memoria oscila / aumenta / disminuye con el tiempo. También podré calcular los picos máximo y mínimo.

¿Alguien ha hecho algo como esto?

Gracias por adelantado.


Además de las respuestas anteriores, también disfruté usando Profiler hace un par de años. No sé si eso ayuda.


Con algo como JProfiler, todo lo que necesita hacer es agregar ciertos parámetros a la JVM. Utiliza JVMTI.

Creo que deberías estar leyendo sobre los perfiladores y qué pueden hacer por ti. También sugiero leer sobre JVMTI.

La interfaz de la herramienta JVMTM (JVM TI) es una nueva interfaz de programación nativa para el uso de herramientas. Proporciona una forma de inspeccionar el estado y controlar la ejecución de las aplicaciones que se ejecutan en la máquina virtual Java (JVM). JVM TI es compatible con toda la gama de herramientas que necesitan acceso al estado de JVM, incluidas, entre otras, las herramientas de análisis de perfiles, depuración, monitoreo, análisis de hilos y cobertura.

Nota: JVM TI reemplaza a Java Virtual Machine Profiler Interface (JVMPI) y Java Virtual Machine Debug Interface (JVMDI). JVMPI y JVMDI se eliminarán en la próxima versión principal de J2SETM.


Desarrollo en Eclipse pero tengo Netbeans para usar su excelente Profiler. Es limitado en comparación con algunos comerciales, pero sigue siendo lo suficientemente bueno para detectar la mayoría de los cuellos de botella


Puede usar jrcmd, que es una utilidad de línea de comandos que viene con JRockit JVM. Si conoce el pid del proceso de Java, puede hacer lo siguiente:

JROCKIt_HOME/bin/jrcmd <pid> print_object_summary

y te dará:

31.8% 3198k 41907 -137k [C 11.9% 1196k 300 +0k [B 11.4% 1151k 49118 +6k java/lang/String 6.1% 612k 5604 +0k java/lang/Class 4.3% 431k 2388 +0k [I 3.5% 353k 15097 +0k java/util/HashMap$Entry ...


Recomiendo la edición de producción de dynaTrace. Herramienta increíble para la aplicación de memoria de perfil. Bajos gastos generales y 100% de las transacciones ejecutadas.




Varios perfiladores como yourkit tienen API para rastrear las asignaciones de memoria. Otra opción aquí son herramientas de monitoreo como jxinsight o glassbox o jamon

Para analizar volcados de almacenamiento dinámico, Eclipse Memory Analyzer es la mejor herramienta que puede obtener. Es gratuito y de código abierto, por lo que puede automatizar el análisis de los volcados de almacenamiento dinámico tanto como desee.


Yourkit también tiene un buen perfilador