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で開きます
最大のターゲット固有のエラー