Desbordamiento de pila y desbordamiento de pila

    Desbordamiento de pila de Jvm y desbordamiento de pila

Uno, desbordamiento del montón de jvm

1. Introducción

Al ejecutar un programa java en jvm, si la memoria requerida por el programa es mayor que la memoria de pila máxima del sistema (-Xmx), se producirá un problema de desbordamiento de pila.

2. Caso

Copiar codigo

// Introducción: La ejecución de este código requiere más de 10 m de espacio de memoria 
public class HeadOverflow { 
    public static void main (String [] args) { 
        List <Object> listObj = new ArrayList <Object> (); 
        for (int i = 0; i <10; i ++) { 
            Byte [] bytes = new Byte [1 * 1024 * 1024]; 
            listObj.add (bytes); 
        } 
        System.out.println ("Agregar éxito"); 
    } 
} 
 
// Establecer el jvm del programa Información de parámetros 
-Xms1m -Xmx10m -XX: + PrintGCDetails -XX: + HeapDumpOnOutOfMemoryError 
Memoria de pila inicial y memoria de pila máxima Gc información de registro detallada

Copiar codigo

 

 

 

3. Resumen

En el entorno de implementación formal del proyecto, el programa lee la memoria del sistema de forma predeterminada. Generalmente, la memoria de pila inicial (-Xms) del programa se establece en == la memoria de pila máxima disponible (-Xmx).

 

Dos, desbordamiento de pila de jvm

1. Introducción

a. La profundidad de la pila solicitada por el hilo es mayor que la profundidad máxima permitida por la máquina virtual StackOverflowError

b. Cuando la máquina virtual expande la profundidad de la pila, no puede solicitar suficiente espacio de memoria. OutOfMemoryError

Comprensión: cada llamada de método tendrá un marco de pila insertado en la pila de la máquina virtual. El sistema operativo asigna memoria limitada a la JVM y la JVM asigna memoria limitada a la "pila de la máquina virtual". Si hay demasiadas llamadas a métodos, la pila de la máquina virtual se desbordará cuando la pila esté llena. Aquí, la profundidad de la pila se refiere al número de marcos de pila. https://www.cnblogs.com/lovlife/articles/12452502.html

2. Caso

Copiar codigo

// Circula recursivamente, hasta que alcanza la profundidad máxima de jvm 
public class StackOverflow { 
     Private static int count; 
     
     public static void count () { 
        try { 
             count ++; 
             count (); 
        } catch (Throwable e) { 
            System.out.println ( "Profundidad máxima:" + recuento); 
            e.printStackTrace (); 
        } 
     } 
     public static void main (String [] args) { 
         count (); 
    } 
}

Copiar codigo

 

 Ajustar el tamaño de la pila de jvm

C: \ Users \ rocky fang \ Documents \ mycode> java -Xss2m -cp "C: \ Users \ rocky fang \ Documents \ mycode" JavaStackTest
java.lang.StackOverflowError
altura de pila: 23345

C: \ Users \ rocky fang \ Documents \ mycode> java -Xss5m -cp "C: \ Users \ rocky fang \ Documents \ mycode" JavaStackTest
java.lang.StackOverflowError
altura de pila: 93213

C: \ Users \ rocky fang \ Documents \ mycode> java -Xss10m -cp "C: \ Users \ rocky fang \ Documents \ mycode" JavaStackTest
java.lang.StackOverflowError
altura de pila: 423618

Set-Xss5m para llamar después de establecer la profundidad máxima de llamada

 

 Resumen: Cada computadora tendrá un límite máximo de profundidad de llamada para evitar bucles infinitos de recursividad en el código.

          Cuanto mayor sea el contenido de la tabla de variables locales, mayor será el marco de la pila y menor la profundidad de la pila.

Tres, desbordamiento de memoria y pérdida de memoria
1. Diferencias
: desbordamiento de memoria: solicite espacio de memoria, excediendo el espacio máximo de memoria de pila.

Fuga de memoria: de hecho incluye desbordamiento de memoria, el espacio de memoria del montón está ocupado por objetos inútiles y no se libera en el tiempo, lo que lleva a la ocupación de memoria y finalmente a pérdidas de memoria.

      Situación: objetos modificados estáticamente.

      Solución: reduzca la definición de constantes (consulte la memoria del servidor para obtener más detalles) 

Supongo que te gusta

Origin blog.csdn.net/liyang_nash/article/details/108244188
Recomendado
Clasificación