Análisis simple de MAT del problema de desbordamiento de memoria

Simular una situación de desbordamiento de memoria

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
 * 向List集合中添加100万个字符串,每个字符串由1000个UUID组成。如果程  序能够正常执行,最后打印ok。
 */
public class TestJvmOutOfMemory {
    
    
    public static void main(String[] args) {
    
    
        List<Object> list = new ArrayList<>();
        for (int i = 0; i < 10000000; i++) {
    
    
            String str = "";
            for (int j = 0; j < 1000; j++) {
    
    
                str += UUID.randomUUID().toString();
            }
            list.add(str);
        }
        System.out.println("ok");
    }
}

inserte la descripción de la imagen aquí

-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

inserte la descripción de la imagen aquí

Análisis con MAT

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
Se puede ver a partir de los resultados del análisis que el 92,16 % de la memoria está ocupada por Object[], por lo que es sospechoso.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Resumen de las principales funciones de la interfaz MAT

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Genera volcado de pila en tiempo real

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Histograma

El gráfico de barras muestra el uso de cada clase, como el número de clases, el espacio ocupado, etc.
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

agrupamiento

inserte la descripción de la imagen aquí

clasificar

inserte la descripción de la imagen aquí

Búsqueda habitual

inserte la descripción de la imagen aquí

Ver citas

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

código

import java.util.ArrayList;
import java.util.Random;
/**
 * -Xms30m -Xmx30m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps
   -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/dump.hprof
 */
public class OOMTest {
    
    
    public static void main(String[] args) throws InterruptedException {
    
    
        ArrayList<Box> list = new ArrayList<>();
        while(true){
    
    
            Thread.sleep(100);
            list.add(new Box(new Random().nextInt(1024 * 1024)));
        }
    }
}

class Box{
    
    
    private byte[] data;

    public Box(int length) {
    
    
        this.data = new byte[length];
    }
}

Comparando dos histogramas

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Referencias de entrada y salida

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

arbol de dominacion

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Mostrar información del hilo

inserte la descripción de la imagen aquí
inserte la descripción de la imagen aquí

Mostrar información general del montón

inserte la descripción de la imagen aquí
Muestra información general del montón, como algunos objetos que consumen más.

Supongo que te gusta

Origin blog.csdn.net/fengsheng5210/article/details/123681123
Recomendado
Clasificación