目录
参考文章
long_24k_os的博客_八宝粥大朋友_CSDN博客-layui,mysql,java领域博主JProfiler的安装和使用_vicky_pyh的博客-CSDN博客_jprofilerlong_24k_os的博客_八宝粥大朋友_CSDN博客-layui,mysql,java领域博主
安装与配置
首先进入Jpofiler官网 下载安装包后安装
安装后输入许可证和密钥——节选自这位朋友
在IDEA中安装Jprofiler插件
安装并配置安装好的Jprofiler文件
安装成功会出现
为什么要使用内存快照分析工具
如果在一个项目中,出现了OOM故障,该如何定位错误、排除并研究为什么出错呢
使用内存快照分析工具 MAT(Eclipse继承) Jprofiler
Jprofiler、MAT作用
1.分析dump内存文件,快速定位内存泄漏位置
2.获取堆中数据
3.获得很大的对象
使用教程
public class Main {
public static void main(String[] args) {
//jvm虚拟机试图调用的最大内存
long maxMemory = Runtime.getRuntime().maxMemory();
//返回jvm的总内存
long totalMemory = Runtime.getRuntime().totalMemory();
System.out.println("maxMemory字节为:"+maxMemory+" 内存为:"+maxMemory/1024*1.0/1024*1.0+"M");
System.out.println("totalMemory字节为:"+totalMemory+" 内存为:"+totalMemory/1024*1.0/1024*1.0+"M");
String str="123";
while(true){
str+=new Random().nextInt(12345678)+new Random().nextInt(999999999)+new Random().nextInt(999999999);
}
}
}
当我们运行一段会内存超限的信息,我们并不能知道每个对象占用了多少内存,具体是那些地方导致了内存超限
我们可以手动生成jvm内存快照dump文件,然后通过内存快照分析文件Profiler来对dump文件进行分析。
具体的生成方式为向VM配置参数
-Xms1m -Xmx1m -XX:+HeapDumpOnOutOfMemoryError
其中-XX:+HeapDumpOnOutOfMemoryError的意思为,当出现OOM错误时,生成Dump文件
再次运行程序,我们可以看到dump文件已经生成,名称为java_pid3608.hprof
我们在程序目录文件中就可以找到对应的文件了
双击可以通过Jprofiler打开
分析Dump文件
参考文章JProfiler的安装和使用_vicky_pyh的博客-CSDN博客_jprofiler
系统中出现OOM通常是一下几种原因
1.频繁创建Java对象
2.存在大对象
3.存在内存泄漏
对于1、2中情况可以通过当前对象集分析
其中实例计数时代表类被实例的次数(new的次数),内存占用大小为这个类当前占用内存的大小
当对象被实例的次数很多时,说明对象一直再被创建
当对象被实例的次数不多但是占用内存特别大时,说明对象是大对象
在线程转储中选择main线程,可以准确定位错误