Configurar parámetros de máquina virtual en idea y desbordamiento de memoria de máquina virtual

Desbordamiento del montón de Java

El montón de Java se utiliza para almacenar instancias de objetos. Si el número de objetos aumenta hasta la capacidad máxima del montón, se producirá un desbordamiento de la memoria.

El valor mínimo de heap-Xms El valor máximo de heap-Xmx

Idea configurar los parámetros de la máquina virtual

idea
Establecer parámetros de máquina virtual

    static class OOMObject
    {
    
    

    }

    public static void main(String[] args)
    {
    
    
        List<OOMObject> list = new ArrayList<>();
        while (true)
        {
    
    
            list.add(new OOMObject());
        }
    }

resultado de la operación

java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid16012.hprof ...
Heap dump file created [29135766 bytes in 0.072 secs]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at java.util.Arrays.copyOf(Arrays.java:3210)
	at java.util.Arrays.copyOf(Arrays.java:3181)
	at java.util.ArrayList.grow(ArrayList.java:265)
	at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
	at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
	at java.util.ArrayList.add(ArrayList.java:462)
	at Scratch.main(scratch.java:44)

Desbordamiento de pila de máquina virtual y pila de método local

El parámetro -Xss modifica la capacidad de la pila.

  1. Si la profundidad de pila solicitada por el hilo es mayor que la profundidad máxima permitida por la máquina virtual, se lanzará una excepción "StackOverflowError".
  2. Si la memoria de la pila de la máquina virtual permite la expansión dinámica, cuando la capacidad de la pila de expansión no puede solicitar suficiente memoria, se lanzará una excepción OutOfMemoryError.

Desbordamiento constante del grupo de área de método y tiempo de ejecución

El grupo de constantes de tiempo de ejecución es parte del área de métodos.
Los parámetros de la máquina virtual -XX: PermSize, -XX: MaxPermSize limitan el tamaño de la generación permanente.
En JDK6 y máquinas virtuales HotSpot anteriores, el grupo constante se asigna en la generación permanente y el grupo constante de JDK7 y superior se asigna en el montón de Java. Entonces, antes de JDK6, al limitar el tamaño de la generación permanente, la máquina virtual puede lanzar una excepción OutOfMemoryError. Después de JDK7, el espacio de pila debe ser limitado.
String :: intern () : Si el grupo de constantes de cadena ya contiene una cadena igual a este objeto String, devuelve una referencia al objeto String que representa la cadena en el grupo; de lo contrario, devolverá los caracteres contenidos en este objeto String La cadena se agrega al grupo constante y se devuelve una referencia a este objeto String.

 public static void main(String[] args)
    {
    
    
        String str1 = new StringBuilder("计算机").append("网络工程").toString();
        System.out.println(str1.intern() == str1);

        String str2 = new StringBuilder("ja").append("va").toString();
        System.out.println(str2.intern() == str2);
    }
返回结果:
JDK7及以上
true
false
JDK6
false
false

Motivo: en JDK6, la cadena encontrada por primera vez se almacenará en la generación permanente, y la devolución es una referencia en la generación permanente, y StringBuilder es un objeto creado en el montón de Java, por lo que no es una referencia.
El grupo de constantes de JDK7 o superior se ha movido al montón de Java. Solo necesita registrar la primera aparición de la instancia de referencia. Por lo tanto, se utilizan la referencia devuelta por intern () y la instancia de cadena creada por StringBuilder. str2 devuelve falso porque los caracteres java no se encuentran por primera vez (cargados en el grupo constante al cargar la clase sun.misc.Version).
Después de JDK8, el metaespacio reemplaza a la generación permanente.
El parámetro -XX: MaxMetaspaceSize establece el valor máximo del metaespacio.El valor predeterminado es -1, lo que significa que no hay límite y solo está limitado por la memoria local.
-XX: MetaspaceSize: Especifique el tamaño inicial del metaespacio, en bytes. Cuando se alcance este valor, se activará la recolección de basura para la descarga de tipos y el recolector ajustará el valor. Si se libera una gran cantidad de espacio, el valor debe reducirse adecuadamente, y si se libera una pequeña cantidad de espacio, se puede reducir adecuadamente.
-XX: MinMetaspaceFreeRatio: La función es controlar el porcentaje de la capacidad restante del metaespacio más pequeño después de la recolección de basura, lo que puede reducir la frecuencia de recolección de basura debido a un metaespacio insuficiente.

Desbordamiento de memoria nativa

La memoria directa se especifica mediante -XX: ManDirectMemorySize. No especifique la memoria predeterminada y de pila siempre (-Xmx)

Supongo que te gusta

Origin blog.csdn.net/weixin_43663421/article/details/109323425
Recomendado
Clasificación