Las bibliotecas estándar para el lenguaje de programación Java proporciona la clase HashMap . Un HashMap es una asignación de teclas a los valores , donde las claves y los valores pueden pertenecer a cualquier clase Java dado. Entre otras operaciones, HashMap proporciona un método para encontrar el valor asociado a una clave dada y para agregar y eliminar ( clave, valor ) pares de la HashMap . HashMaps son una fuente común de errores de pérdida de memoria en los programas de Java : las instancias de una clase se gestionan correctamente por el código, pero un error de programación no posibiliten su borrado del HashMap cuando ya no se necesitan . Debido a que existe al menos una referencia excelente para los objetos huérfanos , recolector de basura de Java no puede recuperar su memoria, por lo que el tiempo de ejecución de Java al final se queda sin memoria heap. Instrucciones
1
Ejecutar la aplicación Java con la herramienta de perfiles ( HPROF ) activa y registro perfiles montón . La forma precisa de hacer esto depende del sistema operativo . Por ejemplo , en Linux , inicie la aplicación de la siguiente manera :
java- Xrunhprof : file = mylog.txt , heap = sitios myApp
myApp Reemplazar por el nombre de la aplicación Java. Esta invocación se inicia la máquina virtual de Java ( JVM ) en el modo de perfil , . La JVM escribe la salida del generador de perfiles para presentar mylog.txt
2
Haga su proceso de solicitud alguna carga de trabajo , por lo que los objetos ( en en particular , HashMaps ) se asignan y se desecha. Tomar una instantánea del estado del montón. Por ejemplo , en Linux, el generador de perfiles genera una instantánea del estado de la pila cuando se ejecuta :
matar -3 jvmPID
Reemplace jvmPID con el identificador de proceso de la instancia de JVM que ejecuta su aplicación . HPROF añade una instantánea del montón con el contenido actual de mylog.txt archivo.
3
Haga su proceso de aplicación más o menos la misma cantidad de carga de trabajo para que más objetos se crean y recolección de elementos . Tome otra instantánea del estado de la pila como en el paso 2 .
4
Compara las dos instantáneas tomadas en los pasos 2 y 3. En particular , mire la línea entre " SITES BEGIN" y " END SITIOS . " Identificar las clases cuyos objetos han aumentado más en número entre las dos instantáneas , esos son los responsables de las pérdidas de memoria , ya que la carga procesada por la aplicación era más o menos constante a lo largo de las dos instantáneas
5
Examinar . las instantáneas para identificar las partes del código de asignación de objetos que no se deje liberados cuando sea necesario. Para ello , se concentran en las líneas que comienzan con " TRACE " que tienen un evento " " en la siguiente línea de captura para cada una de las clases identificadas en el Paso 4 .
6 Incluya el supresiones que faltan referencias a las clases de problemas para las partes del código identificado en el paso 5 . Las pérdidas de memoria ya no suceden.