Obtener más detalles sobre una fuga de memoria específica

Mi pérdida de memoria se ve así: fuga

Al no tener tanta experiencia con el Eclipse Memory Analyzer me pregunto si puede responder esas dos preguntas:

  • ¿Cuál es la posición del código fuente donde se asignaron la mayoría de esas instancias?
  • ¿Cuál es la razón por la que no se recolectaron basura?
    1. ¿Se detuvieron pero todavía se mencionan en alguna parte?
    2. ¿Siguen ejecutando o durmiendo?

EDIT: Parece puentes tenía razón y mis hilos nunca mueren. Sin embargo, no estoy realmente seguro de la razón, ya que el stacktrace no parece contener nada de mi código. La forma en que uso ExecutorService debe ser incorrecta de alguna manera.

hilos

preguntado el 27 de agosto de 11 a las 14:08

1 Respuestas

En algún lugar, su código está creando subprocesos, y esos subprocesos nunca mueren. Los subprocesos no se pueden recolectar como basura, ya que un subproceso es una raíz gc. La forma más fácil de depurar esto será iniciar la aplicación, esperar hasta que tenga una gran cantidad de subprocesos y luego conectarse a la aplicación con JConsoley observe los rastros de pila de los subprocesos. Para ver los rastros de la pila, haga clic en el pestaña de hilos y haga clic en un hilo debajo de hilos en vivo.

Respondido 27 ago 11, 20:08

Usted tenía razón. Edité mi publicación. Si tienes más pensamientos, házmelo saber. - mibollma

¿Está pidiendo el cierre de sus ejecutores cuando haya terminado con ellos? - puentes

Es probable que ese sea el problema, gracias. Por curiosidad ... ¿hay alguna herramienta de análisis de código estático que emitiría una advertencia en tal caso (Clase instanciada pero método esencial nunca llamado)? - mibollma

Probablemente no en este caso, es común crear Ejecutores que vivan durante la vida útil de la aplicación y nunca se cierran. - puentes

Lo verifiqué. Tenías razón sobre shutdown (). Muchas gracias :) - mibollma

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.