Te recomendamos que pruebes esta resolución en un ambiente controlado antes de pasarlo a producción, saludos.
Solución:
Memoria de montón
La memoria del montón es el área de datos de tiempo de ejecución desde la cual Java VM asigna memoria para todas las instancias y matrices de clase. El montón puede ser de un tamaño fijo o variable. El recolector de elementos no utilizados es un sistema automático de administración de memoria que recupera la memoria del montón para los objetos.
-
Espacio Edén: el grupo desde el que se asigna inicialmente la memoria para la mayoría de los objetos.
-
Espacio de sobreviviente: La piscina que contiene objetos que han sobrevivido a la recolección de basura del espacio Edén.
-
Generación Titular o Generación antigua: El grupo que contiene objetos que han existido durante algún tiempo en el espacio de supervivientes.
Memoria no acumulada
La memoria que no es de montón incluye un área de método compartida entre todos los subprocesos y la memoria necesaria para el procesamiento interno o la optimización de la VM de Java. Almacena estructuras por clase, como un conjunto de constantes de tiempo de ejecución, datos de campos y métodos, y el código para métodos y constructores. El área del método es lógicamente parte del montón pero, dependiendo de la implementación, es posible que una VM de Java no la recolecte basura ni la compacte. Al igual que la memoria del montón, el área de métodos puede tener un tamaño fijo o variable. La memoria para el área del método no necesita ser contigua.
-
Generación Permanente: el grupo que contiene todos los datos reflexivos de la propia máquina virtual, como objetos de clase y método. Con las máquinas virtuales de Java que utilizan el uso compartido de datos de clase, esta generación se divide en áreas de solo lectura y de lectura y escritura.
-
Caché de código: HotSpot Java VM también incluye un caché de código, que contiene memoria que se utiliza para compilar y almacenar código nativo.
Aquí hay alguna documentación sobre cómo usar Jconsole.
El new
La palabra clave asigna memoria en el montón de Java. El montón es el grupo principal de memoria, accesible para toda la aplicación. Si no hay suficiente memoria disponible para asignar para ese objeto, la JVM intenta recuperar algo de memoria del montón con una recolección de elementos no utilizados. Si todavía no puede obtener suficiente memoria, un OutOfMemoryError
se lanza, y la JVM sale.
El montón se divide en varias secciones diferentes, llamadas generaciones. A medida que los objetos sobreviven a más recolecciones de basura, se promocionan a diferentes generaciones. Las generaciones mayores no se recogen basura con tanta frecuencia. Debido a que estos objetos ya han demostrado tener una vida más larga, es menos probable que sean recolectados como basura.
Cuando los objetos se construyen por primera vez, se asignan en el Espacio Edén. Si sobreviven a una recolección de basura, son promovidos a Survivor Space, y si viven lo suficiente allí, se asignan a la Generación Titular. Esta generación es basura recolectada con mucha menos frecuencia.
También hay una cuarta generación, llamada Generación Permanente o PermGen. Los objetos que residen aquí no son elegibles para la recolección de elementos no utilizados y, por lo general, contienen un estado inmutable necesario para que se ejecute la JVM, como las definiciones de clase y el conjunto de constantes de cadena. Tenga en cuenta que se planea eliminar el espacio PermGen de Java 8 y se reemplazará con un nuevo espacio llamado Metaspace, que se mantendrá en la memoria nativa. referencia:http://www.programcreek.com/2013/04/jvm-run-time-data-areas/
Con Java8, la región que no es de montón ya no contiene PermGen sino Metaspace, que es un cambio importante en Java8, que se supone que elimina los errores de memoria con Java, ya que el tamaño del metaespacio se puede aumentar según el espacio requerido por jvm para datos de clase.
Al final de la artículo puedes encontrar los comentarios de otros desarrolladores, tú incluso puedes mostrar el tuyo si dominas el tema.