文章目录
- Visual GC 插件下载
- 代码示例
- 说明
- spaces 区域
- Perm
- Heap
- Graphs 区域
- Compile Time(编译时间)
- Class Loader Time(类加载时间)
- GC Time
- Eden Space(Eden 区)
- Survivor 0 / Survivor 1(S0 和 S1 区)
- Old Gen(老年代)
- Metaspace(元空间)
Visual GC 插件下载
打开 jvisualvm 工具之后,点击工具选项,然后点击插件
选中可用插件,可以发现,有很多的插件可安装
这里安装的是 Visual GC 插件
一步一步安装即可
代码示例
package com.java.demo;
import java.util.ArrayList;
/**
* @author Woo_home
* @create 2020/7/10 11:34
*/
public class HeapDemo {
public static void main(String[] args){
// 这里一个 size 表示 1 M
int size = 1024 * 1024 * 8;
ArrayList<byte[]> list = new ArrayList<>();
for (int i = 0; i < 1024; i++) {
System.out.println("向 JVM 写入数据 " + (i + 1) + " M");
try {
// 为了能在 jvisualvm 中能看到效果,这里设置延时 1 s
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 每秒往堆中写入一个数据
list.add(new byte[size]);
}
}
}
运行即可在 jvisualvm 监听该程序对应的进程,点击 Visual GC 即可查看堆内存的使用情况
说明
整个区域划分为三个部分,分别为 spaces、graphs、histogram
spaces 区域
代表虚拟机内存分布情况,从图中可以看出,虚拟机被分为 Perm、Old、Eden、S0、S1
Perm
英文名叫做 Permanent Generation,我们称之为永久代,Java 8 之后称为元空间
通过 VM Args:-XX:PermSize=128m -XX:MaxPermSize=256m 设置初始值与最大值
Heap
Java 堆(Java Heap)。它包括老年代(对应图中的 Old 区域)和新生代(对应图中的 Eden、S0、S1 三个统称为新生代,分为 Eden 区和两个 Survivor 区域),它们默认是 8:1:1 分配内存
通过 VM Args:-xms512m -Xmx512m -XX:+HeapDumpOnOutofMemoryError -XX:SurvivorRatio=8 设置初始堆内存、最大内存、内存异常打印 dump、新生代内存、新生代内存分配比例(8:1:1),因为 Heap 分为新生代和老年代,所以 512M - 100M = 412M,老年代就是 412M(初始内存跟最大内存最好相等,防止内存不够时扩充内存或者 Full GC,导致性能下降)
Graphs 区域
Compile Time(编译时间)
图中 996 compiles 表示编译总数,1.413 s 表示编译累计时间。一个脉冲表示一次 JIT 编译,窄脉冲表示持续时间短,宽脉冲表示持续时间长
Class Loader Time(类加载时间)
图中 1675 loaded 表示加载类数量,42 unloaded 表示卸载的数量,905.329ms 表示类加载花费的时间
GC Time
图中 5 collections 表示垃圾收集的总次数,468.449 ms 表示垃圾收集花费的时间,last cause 表示最近垃圾收集的原因
Eden Space(Eden 区)
图中括号内的 315.500 M 表示最大容量,15.000M 表示当前容量,后面的 9.873 M 表示当前使用情况, 1 collections 表示垃圾收集次数,4.732 ms 表示垃圾收集花费时间
Survivor 0 / Survivor 1(S0 和 S1 区)
图中括号内的 105.500 M 表示最大容量,2.500 M 表示当前容量,之后的 0 值是当前使用情况
Old Gen(老年代)
图中括号内的 633.500 M 表示最大容量,633.500 M 表示当前容量,后面的 632.474 M 表示当前使用情况,4 collections 表示垃圾收集次数,463.717 ms 表示垃圾收集花费时间
Metaspace(元空间)
图中括号内的 1.008 G 表示最大容量,9.750 M 表示当前容量,8.973 M 表示当前使用情况