Java

Cuando capturar OutOfMemoryErrors

Java OutOfMemoryError
¿Porqué querrías capturar un OutOfMemoryError? Si un OutOfMemoryError se genera por la JVM, no hay mucho que podamos hacer, así que ¿qué utilidad tiene el OutOfMemoryError?

Encontrarse con un OutOfMemoryError significa que el recolector de basura ya ha hecho todo lo posible para liberar memoria reclamando los espacios de memoria de los objetos que no tienen referencias fuertes. Si no pudo reclamar suficiente espacio, entonces también intenta obtener memoria del sistema operativo subyacente, a menos que el espacio de heap haya alcanzado el límite superior de la JVM fijado por el parámetro -Xmx (-mx en JVMs anteriores a Java 2). Así que si aparece el OutOfMemoryError significa que no hay mas espacio en el heap disponible que se pueda reclamar en este momento, y que o el sistema operativo no ha podido dar más memoria a la JVM o hemos alcanzado el límite superior de la JVM. En cualquier caso, no hay mucho que podamos hacer, así que ¿porqué querríamos capturar un OutOfMemoryError?

Las secciones siguientes describen unas situaciones especiales en las que puede ser útil capturara un OutOfMemoryError.

Seguir leyendo «Cuando capturar OutOfMemoryErrors»

Java

Gestión de Memoria en la Máquina Virtual Java

Java Memory
Normalmente, una JVM (Java Virtual Machine) utiliza estas reglas para la gestión de memoria:

  • Cuando se invoca una JVM para ejecutar una aplicación, pedirá al sistema operativo suficiente memoria para ejecutar la JVM propiamente dichas y algo de memoria libre para que la aplicación pueda crear nuevos objetos.
  • Cuando se crea un nuevo objeto, la JVM reservará memoria para ese objeto dentro del área de memoria libre.
  • Cuando el área de memoria libre se vuelve demasiado pequeño, la JVM pedirá al sistema operativo más.
  • Cuando un objeto no se utiliza más, será destruido. Su memoria será liberada y devuelta al área de memoria libre.
  • Cuando se utiliza todo el área de memoria libre, y no hay más memoria disponible del sistema operativo, la JVM detendrá la aplicación y provocará un «Out of memory error».

Seguir leyendo «Gestión de Memoria en la Máquina Virtual Java»

Java

La Máquina Virtual Java

Java
La JVM (Java Virtual Machine) es una máquina abstracta software que convive armoniosamente con la máquina con microprocesador real que la alberga, de ahí el nombre de máquina virtual (VM). Los programas desarrollados para la JVM se crean utilizando el lenguaje de programación Java. Este lenguaje, como otros lenguajes de algo nivel, tienen una sintaxis que no está enfocada a un procesador espedífico. Como en otros lenguajes de alto nivel el código fuente Java se compila utilizando una herramienta de copilación pero su salida difiere de la de los compiladores tradicionales.

Seguir leyendo «La Máquina Virtual Java»