El Troubleshooting guide for Java SE 6 with Hotspot VM contiene una sección bastante elaborada sobre técnicas para ayudar a detectar fugas de memoria nativa. Estos incluyen:
- envolviendo todas las llamadas de asignación de memoria y desasignación para rastrear la cantidad de memoria utilizada.
- confiando en soporte específico de plataforma como el soporte de depuración proporcionado por el compilador de Microsoft Visual C++ o en mtrace (y MALLOC_TRACE) para depurar asignaciones de memoria en Linux.
- usando herramientas de análisis de pérdida de memoria como Rational Purify.
entre otros. Notablemente, el artículo menciona que no existe una solución ideal para todas las plataformas.
Además, considere utilizar el indicador -Xcheck:jni
que parece estar disponible en la mayoría de las JVM. El indicador -X
indica que el indicador no es estándar, pero el indicador parece estar disponible en IBM JDK, Oracle JRockit R28 e incluso Oracle/Sun JVM. La habilitación de la bandera cambia a un modo donde se agregan envolturas alrededor de llamadas JNI, lo que le permite rastrear argumentos ilegales pasados a llamadas JVM como se indica en el JNI programmers' guide and specification. Si bien, su uso en la detección de fugas de memoria es subjetivo, definitivamente ayudaría si sospecha que la fuga se debe a la emisión de parámetros no válidos.
JProfiler es un buen perfilador que también permite el seguimiento de la creación de objetos. Pero eso no está relacionado con las asignaciones de heap nativas. – eckes