堆内存使用情况监控
准备一份代码
import java.util.ArrayList;
public class HeapTest {
byte[] a=new byte[1024*100];//100KB
public static void main(String[] args) throws InterruptedException {
ArrayList<HeapTest> heapTest=new ArrayList<>();
while (true){
heapTest.add(new HeapTest());
Thread.sleep(10);
}
}
}
把上面的代码复制到IDEA编译器上把跑来,堆控制台啥也没有,就是个死循环向ArrayList中添加对象,这里的对象都是new出来的,那么就会放在堆里面,我们现在进入正题,看看是怎么监控堆内存的,这里提供两种方式
1.jvisualvm命令装载插件(因为这个命令自带的插件安装库中没有)
我们CMD进入命令行
稍加等待…会出现这个界面!!!
看到这个还不行,因为这里没有VisualGC,如果有,也不会存在插件安装这么一说了。
勒!这是VisualGC插件可视化GC插件 下载地址
打开后会懵逼,哈哈,找不到在哪下载!!!不要慌,有我在。上图!!!
点击Plugins进入下一个界面
点击Plugins Centers
在框中选择对应的版本(这里注意,VisualGC目前只有6-8的版本,我当时的JDK的版本是11的,没错就是11这个版本,不是这个版本好用,而是我就是喜欢11这个名字。唉!)
进入jvisualvm的插件管理 “工具” - “插件” 在"设置"中修改url地址为刚才我们在github上找到的对应我们JDK版本的地址
安装VisualGC插件
这时点击完成就可以看到VisualGC这个标签,(如果没有就从起一下这个,上面的cmd命令行c回车一下,或者直接×掉,然后cmd敲jvisualvm这个从起)
这个方法可能比较繁琐,来我们还有解决方案2
2.直接下载VisualGC
VisualGC下载地址
这个是w版的下面的是m版的。
下载后会得到这个文件visualvm_201.zip,解压后会得到这些目录
打开bin目录会看到一个visualvm.exe可执行程序,点击运行即可!然后我们运行我们上面的代码!
这是上面的HelpTest跑了一小会的堆内存GC情况,在左侧的选项中可以看到有一个HelpTest的程序在运行,对就是这个双击,选择右侧的上面的导航栏VisualGC,那么就可以清清楚楚明明白白的看到GC的收集情况,这里如果要知道GC的逻辑,可以看我的另一篇文章JVM底层实现原理这篇文章中涉及到GC对堆内存的处理情况!