java 内存快照怎么看_深入理解java虚拟机-内存快照分析

本文通过一个简单的Java代码示例引发的OutOfMemoryError,讲解如何使用内存快照进行分析。通过配置-XX:+HeapDumpOnOutOfMemoryError参数在内存错误时生成快照,并利用Memory Analyzer工具进行全局分析、Dominator Tree查看以及定位问题所在,为解决复杂内存问题提供辅助。
摘要由CSDN通过智能技术生成

-、情景复现

这里举一个栗子,最简单的 java.lang.OutOfMemoryError: Java heap space错误的分析思路。

简单代码:

public static void main(String[] args) {

List list = new ArrayList();

while(true){

list.add(new String());

System.out.println(1);

}

}

抛出异常:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

at java.util.Arrays.copyOf(Arrays.java:3210)

at java.util.Arrays.copyOf(Arrays.java:3181)

at java.util.ArrayList.grow(ArrayList.java:261)

at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:235)

at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:227)

at java.util.ArrayList.add(ArrayList.java:458)

at com.compare_1.Main.main(Main.java:13)

//熟悉的配方 熟悉的味道

一般在简单的程序中,我们浏览代码能迅速的定位到问题所在。然后就可以从硬件或者代码优化来解决这个问题,但是在实际操作过程中,有出现比较复杂的情况,就需要使用一些工具来辅助程序猿来找到出现问题的代码。

二、内存快照

-XX:+HeapDumpOnOutOfMemoryError

9aa05426325561f1b2be34c1563659ec.png

配置VM arguments,加入上面的这条设置,在内存报错时则可以生成快照。快照存储在当前项目所在的workspace中

02ebdd4214bfa86905d7b4e5ac96bfe9.png

三、Memory Analyzer 快照分析工具

1)选择适合的版本然后打开(不多说)。

2)选择快照,打开-工具左上角-File-Open Head Dump。

3)分析

3.1overview 全局分析内存使用情况

826ea60d09f822f959d33648e842682c.png

深颜色表示出错内存所占总分配内存的总数,这里-Xms20m -Xmx20m。

3.2 Open Dominator Tree

这里加载堆内存的所有信息,百分比让问题显而易见。

这里 Shallow Heap 单个对象所占大小。

Retained Heap 所有对象及引用所占大小。(垃圾回收)

c7937c183a645139d4f8fcb3c58ae9eb.png

3.3定位出错所在

9cb48118d73a6825463ed75cab18063a.png

总结

目前刚接触这个分析工具,这里简单描述下思路,未来会持续更新。

— over–

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值