メモリオーバーフロー問題のMAT簡単な分析

メモリオーバーフローの状況をシミュレートする

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");
    }
}

ここに画像の説明を挿入

-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

ここに画像の説明を挿入

MATによる分析

ここに画像の説明を挿入
ここに画像の説明を挿入
分析結果から、メモリの92.16%がObject []で占められていることがわかり、疑わしいです。
ここに画像の説明を挿入
ここに画像の説明を挿入

MATインターフェースの主な機能の概要

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

リアルタイムでヒープダンプを生成する

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

ヒストグラム

棒グラフは、クラスの数、占有スペースなど、各クラスの使用状況を示します。
ここに画像の説明を挿入
ここに画像の説明を挿入

グループ化

ここに画像の説明を挿入

選別

ここに画像の説明を挿入

定期的な検索

ここに画像の説明を挿入

引用を表示

ここに画像の説明を挿入
ここに画像の説明を挿入

コード

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];
    }
}

2つのヒストグラムの比較

ここに画像の説明を挿入
ここに画像の説明を挿入

インおよびアウトリファレンス

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

支配ツリー

ここに画像の説明を挿入
ここに画像の説明を挿入

スレッド情報を表示する

ここに画像の説明を挿入
ここに画像の説明を挿入

ヒープ全体の情報を表示する

ここに画像の説明を挿入
最も消費するオブジェクトなど、全体的なヒープ情報を表示します。

おすすめ

転載: blog.csdn.net/fengsheng5210/article/details/123681123