Área de memoria de pila de JVM

Montón, una JVM tiene solo una memoria de montón y el tamaño de la memoria de montón se puede ajustar.
Después de que el cargador de clases lee estos archivos, generalmente coloca lo que está en el montón:
clases, métodos, constantes, variables y guarda el objeto real del tipo al que se hace referencia.

La memoria del montón se divide en tres áreas:

  • Área de recién nacidos (espacio Edén)
  • Área de retiro

  •  Inserte la descripción de la imagen aquí
    Recolección de basura de GC en el área permanente , principalmente en Eden Park y el área de
    retiro.Suponiendo que la memoria está llena, OOM, y la memoria del montón no es suficiente
    después de JKD8, se cambia el nombre del área de almacenamiento permanente (metaespacio);
    Inserte la descripción de la imagen aquí

Área de recién nacidos:
categoría: lugar de nacimiento y crecimiento, incluso muerte;

  • Jardín del Edén: Todos los objetos son nuevos en el Jardín del Edén.

  • Área de supervivencia (0, 1)

  • Después de la investigación, el 99% de los objetos son temporales.

Área de ancianos:

Área permanente
Esta área es residente en la memoria. Se utiliza para almacenar objetos de clase transportados por el propio JDK. Los metadatos de la interfaz almacenan información del entorno o de la clase cuando Java se está ejecutando ~, ¡no hay recolección de basura en esta área! Desactivar la virtualización de VM liberará la memoria en esta área.
Una clase de inicio carga una gran cantidad de paquetes jar de terceros. Tomcat ha implementado demasiadas aplicaciones, una gran cantidad de clases de reflexión generadas dinámicamente. Constantemente cargada. Hasta que la memoria esté llena, aparecerá 00M;
● Antes de jdk1.6: generación permanente, el grupo constante está en el área de método;
● jdk1.7: generación permanente, pero lentamente degradado, vaya a la generación permanente, el grupo constante es en el montón
● Después de jdk1.8: no hay generación permanente, el grupo constante está en el metaespacio

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Metaspace: lógicamente existe, no físicamente

Ejecutemos un programa para ver el tamaño de la memoria de la máquina virtual:

public class Test {
    
    

    public static void main(String[] args) {
    
    
        //返回虚拟机试图使用的最大内存
        long max = Runtime.getRuntime().maxMemory();
        //返回jvm的初始化总内存
        long total = Runtime.getRuntime().totalMemory();

        System.out.println("max=" + max +"字节" + (max/(double)(1024*1024))+"MB");
        System.out.println("total=" + max +"字节" + (total/(double)(1024*1024))+"MB");
        //默认情况下:分配内的总内存大约是电脑内存的1/4,而初始化的内存为1/64
    }
}

De forma predeterminada: la memoria total asignada es aproximadamente 1/4 de la memoria de la computadora y la memoria inicializada es 1/64
. El resultado de la operación: (La memoria de mi computadora es 16G)
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Se puede ver que 305664k + 699392 = 1029177344 por lo que la memoria física del metaespacio
no está en el montón

Ajuste manualmente el tamaño de la memoria en Configuración:

-Xms1024m -Xmx1024m -XX: + PrintGCDetails

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
TÍO:

public class Hello {
    
    
    public static void main(String[] args) {
    
    

// -Xms8m -Xmx8m -XX:+PrintGCDetails
   String str = "longzx6666666666666";
   while (true){
    
    
       str += str + new Random().nextInt(999999999)+new Random().nextInt(999999999);
   }
    }

}

Ajuste la memoria a 8M, imprima el resultado

-Xms8m -Xmx8m -XX: + PrintGCDetails

Inserte la descripción de la imagen aquí

En un proyecto, apareció repentinamente la falla 0OM, luego cómo solucionar el problema ~ Investigue por qué salió mal

● Puede ver el error en las primeras líneas del código: herramienta de análisis de instantáneas de memoria, MAT, Jprofiler
● Dubug, analizar el código línea por línea! El
papel de MAT, Jprofiler
● Analizar archivos de memoria de volcado, localizar rápidamente fugas de memoria;
● Obtener datos en el montón
● Obtener objeto grande ~
Herramienta de análisis de memoria: Descarga e instalación de JProfiler, IDEA ha instalado el complemento

1. Descargue el
complemento JProfiler (IDEA) . Descargue los complementos de configuración directamente en IDEA, busque JProfiler y haga clic en el botón de instalación para instalar, y luego inicie la herramienta IDEA.
Método 2:
Descargue el complemento desde el sitio web oficial, instale manualmente el
complemento oficial. La dirección de descarga
está en la página de inicio, en el medio. Puede ver la última versión de JProfiler, incluidos los enlaces de descarga de la versión histórica. Haga clic en DESCARGAR para descargar.
Luego introduzca el complemento en IDEA,
Inserte la descripción de la imagen aquí
busque la ubicación de su paquete comprimido y luego reinicie después de que la
instalación sea exitosa, habrá los siguientes signos
Inserte la descripción de la imagen aquí

2. Instale la
dirección del sitio web oficial del software de monitoreo JProfiler
Inserte la descripción de la imagen aquí
3. Configure el entorno operativo de IDEA
Configuración – Herramientas – JProflier – Ejecutable JProflier Seleccione JProfile para instalar el archivo ejecutable. (Si solo se instala una versión en el sistema, se seleccionará de forma predeterminada al iniciar IDEA) Guardar
Inserte la descripción de la imagen aquí
prueba:

import java.util.ArrayList;

public class DumpDemo {
    
    
    byte[] array = new byte[1*1024*1024]; //1m

    public static void main(String[] args) {
    
    
        ArrayList<DumpDemo> list = new ArrayList<>();
        int count = 0;
        try{
    
    
            while (true){
    
    
                list.add(new DumpDemo());
                count = count + 1;
            }
        }catch (Exception e){
    
    
            System.out.println(" count:"+count);
        }
    }
}

Inserte la descripción de la imagen aquí

-Xms1m -Xmx8m -XX: + HeapDumpOnOutOfMemoryError

Corre de nuevo
Inserte la descripción de la imagen aquí

Abra el archivo
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Haga clic para abrir el archivo, use JProfiler para analizar el
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
hilo de análisis:
Inserte la descripción de la imagen aquí
también puede detectar Error en el programa,
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_41784749/article/details/111589410
Recomendado
Clasificación