JVMヒープメモリの調整

6.1ヒープ領域の違い

JDK1.7ヒープメモリ

JDK1.8ヒープメモリ

IDEAを使用してヒープメモリサイズテストを調整します

ヒープメモリの調整

-Xms :初期割り当てサイズを設定します。デフォルトは物理メモリの「1/64」です。
-Xmx :割り当てられた最大メモリ。デフォルトは物理メモリの「1/4」です。
-XX:+ PrintGCDetails:詳細なGC処理ログを出力します。

コード例

package cn.guardwhy.jvm_02;

public class Demo01 {
    
    
    public static void main(String[] args) {
    
    
        // 1.返回虚拟机试图使用的最大内存
        long maxMemory = Runtime.getRuntime().maxMemory();  // 字节 1024 * 1024
        // 2.返回JVM的初始化总内存
        long totalMemory = Runtime.getRuntime().totalMemory();

        // 输出结果
        System.out.println("MAX_MEMORY=" + maxMemory + "字节\t" + (maxMemory/(double)1024/1024)+ "MB");
        System.out.println("TOTAL_MEMORY=" + totalMemory + "字节\t" + (totalMemory/(double)1024/1024)+ "MB");

        // 默认情况下: 分配的总内存是PC内存的1/4, 而初始化的内存是:1/64
    }
}

IDEAのJVMチューニングパラメータ設定

デフォルトでは、割り当てられたメモリは合計メモリの1/4であり、初期化されたメモリは1/64です。

-Xms1024m -Xmx1024m -XX:+PrintGCDetails

の結果

メタスペースは仮想マシンにはありませんが、ローカルメモリを使用します。

6.2ダンプメモリスナップショット

Javaプログラムを実行するときは、テストツールを使用して、テスト実行中のメモリ使用量を確認する必要があります。このようなプラグインJProfilerは、パフォーマンスのボトルネック分析ツールです。
基本機能

  • ダンプファイルを分析して、メモリリークをすばやく見つけます。
  • ヒープ内のオブジェクトの統計データを取得し、オブジェクト間の相互参照関係を取得します。
  • ツリーは、オブジェクト間の相互参照を示すために使用されます。

JProfilerをインストールします

1.IDEAプラグインのインストール

2.JProfiler監視ソフトウェアをインストールします

ダウンロードリンク

3.登録コード

L-Larry_Lau@163.com#5481-ucjn4a16rvd98#6038
L-Larry_Lau@163.com#99016-hli5ay1ylizjj#27215

4.IDEAオペレーティング環境を構成します

5.分析するプロジェクトを選択し、JProfilerアイコンをクリックして開始すると、開始後にJProfilerウィンドウが自動的にポップアップし、コードのパフォーマンスを監視できます。

コードテスト

package cn.guardwhy.jvm_02;

import java.util.ArrayList;
/*
* -Xms 设置初始化内存分配大小 1/64
* -Xmx 设置最大分配内存, 默认1/4
* -XX:+PrintGCDetails 打印GC垃圾回收信息
* -XX:+HeapDumpOnOutOfMemoryError // OOM DUMP
*/
public class Demo02 {
    
    
    // 创建字节数组对象
    byte[] bytes = new byte[1*1024*1024]; // 1m = 1024k
    public static void main(String[] args) {
    
    
        ArrayList<Demo02> list = new ArrayList<>();
        // 定义计数器
        int count = 0;
        try {
    
    
            while (true){
    
    
                list.add(new Demo02());
                count = count + 1;
            }
        } catch (Error e) {
    
    
            System.out.println("总数:" + count);
            e.printStackTrace();
        }
    }
}

VMパラメータのデバッグ

-Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError

の結果

ファイルを探す

Jprofilerツールを使用して分析および表示する

このファイルをダブルクリックして、Jprofilerで開きます

最大のターゲット固有のエラー


おすすめ

転載: blog.csdn.net/hxy1625309592/article/details/114580109