Pregunta

¿Cómo se puede detectar la pérdida de memoria en las aplicaciones Eclipse RCP?

¿Fue útil?

Solución

Es posible que desee probar el Detector de fugas de memoria que viene con JRockit Mission Control junto con Eclipse MAT . Es una combinación poderosa. Ambas herramientas son de uso gratuito para el desarrollo.

Con JRockit Mission Control puede inspeccionar el montón en línea y ver el número exacto de objetos de cierto tipo que están en vivo, sin la necesidad de tomar instantáneas que requieren mucho tiempo. Puede ver directamente si le quedó un objeto Editor, Vista u oyente en el montón después de cerrar la Vista / Editor. Por lo general, es un escucha de marco que se aferra a su vista / editor. Recuerde, debe ir a Windows- > Preferences- > Memory Leak Detector- > Trend y establecer El uso más bajo del montón para informar a 0.0 para ver todas las instancias de objetos.

 texto alternativo
(fuente: oracle.com )

Con MAT, puede usar la ruta más corta para enhebrar la raíz para encontrar la cadena que se aferra al objeto que se escapa. Ver abajo

texto alternativo http://dev.eclipse.org /blogs/memoryanalyzer/files/2008/04/path2gc_all.png

Modifique su código y verifique con el Detector de fugas de memoria que el objeto es basura recolectada cuando cierra el editor / vista.

Otros consejos

Necesita algún tipo de herramienta de creación de perfiles.

Hay un proyecto Memory Analyzer en eclipse ( wiki , blog ).

Además, parece que TPTP también hace perfiles.

La solución más simple viene con Java JDK: Java VisualVM.

Está ubicado en el directorio bin (jvisualvm.exe en Windows) desde la actualización 7 de JDK 6.

También incluye un generador de perfiles de memoria, un caminante de almacenamiento dinámico y una integración de Eclipse .

https://visualvm.dev.java.net /images/getstarted/vvm-anagram-profiler.png (lástima, no se me permite usar etiquetas de imagen)

Ver https://visualvm.dev.java.net/

Si está en Windows, la forma más simple es simplemente monitorear, p. proceso eclipse.exe en el Administrador de tareas mientras usa la herramienta. Si su ejecutable RCP tiene un nombre diferente, entonces esto es lo que necesitará monitorear. En Unix, puede usar una herramienta análoga (¿proceso quizás?).

Realice las tareas más intensivas disponibles (o si sospecha que ciertas funciones causan el problema, úselas). Si la cantidad de memoria utilizada por eclipse.exe aumenta, no disminuye eventualmente después de que se hayan completado sus tareas intensivas, entonces es probable que tenga una fuga. Esto eventualmente causará un error de falta de memoria.

Puede acelerar un error de falta de memoria reduciendo la cantidad de memoria disponible para la aplicación a través de " -Xmx " configuración en eclipse.ini (o .ini). P.ej. -Xmx256m significa que hay disponible un máximo de 256 megabytes. Obviamente, esta configuración aún debe ser suficiente para ejecutar su aplicación, pero una configuración más baja obligará a una recolección de basura más frecuente y hará que las fugas sean más evidentes.

Necesita un generador de perfiles de memoria (como han mencionado otros). Una vez que tenga una buena herramienta, puede encontrar los problemas con bastante facilidad.

Usamos: http://www.yourkit.com/

para nuestras pruebas, funciona muy bien, tiene licencias flotantes para que los desarrolladores puedan usarlo localmente en sus máquinas.

Básicamente, toma una instantánea de las acciones que está realizando y luego mira los elementos que fueron asignados y no liberados.

Editar: olvidé agregar, esta herramienta se integra directamente en eclipse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top