“Conocimientos Programación>Programación Java

HashMap : Cómo eliminar la causa de una pérdida de memoria

2013/3/7
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.

Programación Java
Cómo quitar Puntuacion en una cadena Java
Cómo utilizar el operador ternario en Java
Cómo hacer que un servidor de chat en Java
Cómo rotar las imágenes con el azulejo en Java
Cómo crear dos botones en Java
Cómo multiplicar dos números enteros de varios dígitos en Java
¿Cómo saber si su servidor tiene JavaMail
Cómo integrar Java
Conocimientos Informáticos © http://www.ordenador.online