4

Definición de Java Heap y Java Heap Dump

javaEl heap es el espacio de memoria en tiempo de ejecución que se usa para almacenar las instancias de clases, objetos y arrays. Se crea en el inicio de la máquina virtual (JVM) y es gestionado por el Garbage Collector.

Podemos mdificar el tamaño del heap mediante comandos de la JVM: mínimo (-Xms512m) y máximo (-Xmx1024m). También podemos aumentarlo o disminuirlo bajo demanda automáticamente.

Cuando el Garbage Collector reserva espacio de almacenamiento en el heap para un objeto, este sigue vivo mientras exista una referencia a él en la JVM activa. Cuando este objeto deja de estar referenciado desde el estado activo, se convierte en basura (garbage) y permite que ese espacio de heap sea reclamado para su uso. Cuando esto sucede, el Garbage Collector debe procesar la finalización del objeto y asegurarse de que todos los recursos de la JVM usados por ese proceso vuelvan a estar disponibles en el pool correspondiente.

Un Heap Dump es un snapshot o “fotografía” del estado del heap en un momento concreto. Es generado por la JVM y muestra un volcado (dump) de todos los objetos “vivos” en el heap (los usados por la aplicación java) en ese momento.

Un heap dump puede generarse  de varias formas:

  1. De forma automática: la JVM genera un heap dump automáticamente cuando el heap se agota.
  2. De forma explícita: bien enviando la señal correspondiente a la JVM (kill -3 en AIX) o bien utilizando el método HeapDump() desde el código de la aplicación. Para poder hacerlo mediante señales es importante que exista la variable de entorno IBM_HEAPDUMP=TRUE o que JAVA_DUMP_OPTS esté correctamente configurada.
  3. A través de WSADMIN:
    1. Arrancamos el cliente (wsadmin.sh -lang jython)
    2. Vemos el objectName de la JVM: <wsadmin> set objectName [$AdminControl queryNames WebSphere:type=JVM,process=<servername>,node=<nodename>,*]
    3. Invocamos generateHeapDump: <wsadmin> $AdminControl invoke $objectName generateHeapDump

Los siguientes eventos generan automáticamente un heap dump:

  • Una excepción fatal de la JVM (no una excepción java).
  • Un error de OutOfMemory (opcionalmente) o agotamiento del heap.
  • Fallo inesperado de la JVM (crash)

La JVM chequea por este orden la existencia y permisos de escritura para almacenar el dump en la primera ubicación disponible (y con espacio suficiente) por este orden:

  1. Ubicación especificada en la variable de entorno IBM_HEAPDUMPDIR
  2. El directorio en que se esté ejecutando el proceso de la JVM
  3. Ubicación especificada en la variable de entorno TMPDIR
  4. El directorio /tmp

4 Comments

  1. me gustaria sacarme una duda…que no he podido encontrarla en la nube.
    ¿cual es el tamaño asignado por defecto en el heap cuando compilamos un codigo en java sin modificar los parametros (-Xms512m) , (-Xmx1024m) etc..?
    ¿Existira una configuracion de heap espacial en la cual el heap se expanda arbitrariamente de acuerdo a las necesidades sin poner ningún limite?

  2. Consulta mi problema es con mi smartphone moto x2 el cual demora su arranque del sistema no se si la memoria fisica se encontrara medianamente dañada pero se demora en arrancar el sistema android 6.0 como 30 min. Y cuabdo logra arrancar ,al usar camara no responde y aplicación se cierran de repente haciendo que sea incomodo usarlo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *