所用idea版本:idea2020
JProfilter版本:11
一、简单说明
因为前面在网上学习JVM在此处因为所用软件环境版本不太一致,导致有一些差距,浪费了一定量的时间,写这篇博客的目的为记录自己的笔记提醒自己并给有需要的人一点帮助~
二、JProfilter下载安装
先在idea里下载安装
1.点击file(文件)点击setting(设置)看到setting界面
2.点击plugin(插件)在搜索栏搜索JProfilter
3.搜索出来点击install(安装)、、、(如果搜索不到的先把第三步安装本地服务端再来这搜索,之后直接点击导入本地的文件就行)
4.安装完成点击右下角apply(同意)再点击OK
5.安装完成后点击restart(重启)
6.重启之后看到如下图标记(如果有了标记就不用管第7步了)
7.如果没有的话再检查上面的步骤看一下自己的插件是否真的安装完成,记得点击apply和OK;如果安装好了就再点击下图的清理缓存重启吧!
此时应该安装好了就有上图的标记了
在电脑内存里安装JProfilter客户端
直接再百度里搜JProfilter就行,打开官网直接下载,这里其实和一般软件下载安装一样,挺无脑的,只是我的安装习惯是自定义安装,不喜欢默认安装到自己的C盘;
在IDEA里导入客户端环境
1.前面还是一样,点击setting,找到Tools打开找到JProfilter
2.点击右上角的文件(我这是已经安装好的有文件目录,你们没安装应该是空的)
3.找到自己安装JProfilter的bin目录下的exe文件导入
4.记得点击apply最后点击ok
三、写一个测试代码
1、下面是我自己的堆内存溢出异常代码:HeapDumpOnOutOfMemoryError :其实者不都能叫做异常,一个叫一个错误吧!异常的顶级父类为Throwable,其子类才分为Exception和Error;所有它应该算是一个错误;
package JVM_Study.heap;
import java.util.ArrayList;
// -Xms 设置初始化内存分配大小 1/64
// -Xmx 设置最大分配内存,默认 1/4
// -XX:HeapDumpOnOutOfMemoryError //OOM DUMP
public class OomDemo1 {
byte[] array=new byte[1*1024*1024]; //1M
public static void main(String[] args) {
ArrayList<OomDemo1> list=new ArrayList<>();
int count=0;
try {
while (true){
list.add(new OomDemo1()); //问题所在
count+=1;
}
}
catch (Error e){
System.out.println("count= "+count);
e.printStackTrace();
}
}
}
2、此时的运行结果为:
3、添加VM options(点击如图按钮选择Edit Configuration,编辑配置),
4、打开得到如图所示配置,点击Modify options(修改选项),选择ADD VM options(添加虚拟机选项)
5、点击之后得到如下图
6、在上图VM options处加上 -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError
之后,dump文件(此处不同版本的idea的VM options位置不太一样)!!!比2020版本低的一个只要打开编辑配置就能看到
7.添加完之后点击apply之后点击OK就可
8、运行后此时的dump文件就下载下来了
1.java_pid12996.hprof:此次运行的文件名,每次运行的名字大不相同
2.此文件在你的Java文件的src文件同一级上,找到直接打开它会默认JProfilter软件打开
3.或者你直接在idea左边的项目文件里面它会有相应文件,直接点击打开就
四、看看JProfilter效果
这里可以看到主要是集合添加出问题,当然你可以在下一张图找到具体出问题的行数
这样就可以更好地分析解决错误了
五、总结
其实这个过程是很简单地,只是为了大家能够看的清楚明白一些,我就是根据第一次地下载安装来写的,希望大家能看明白。
六、附录
添加命令的作用如下:
-Xms 设置初始化内存分配大小 1/64
-Xmx 设置最大分配内存,默认 1/4
-Xmn Java Heap Young区大小,不熟悉最好保留默认值;
-Xss 每个线程的Stack大小,不熟悉最好保留默认值;
-XX:+PrintGCDetails //打印GC垃圾回收信息
-XX:+HeapDumpOnOutOfMemoryError //OOM DUMP