zoukankan      html  css  js  c++  java
  • JVM

    当内存溢出会抛出 java.lang.OutOfMemoryError: Java heap space 的异常,那这个时候怎样去分析到底哪里导致内存溢出呢?

    我们可以通过在vm的参数, -XX:+HeapDumpOnOutOfMemoryError 记住这个理是大写XX。

    当内存溢出后,显示

    java.lang.OutOfMemoryError: Java heap space
    Dumping heap to java_pid1034.hprof ...
    Heap dump file created [136202426 bytes in 0.908 secs]
    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 test.a.Test.main(Test.java:11)

    然后可以在项目下,找到上面所指的文件,这里的文件叫,java_pid1034.hprof

    直接打开是无法知道里面是什么意思,所以需要eclipse提供的一些工具来进行分析, 可以在网上搜索Eclipse Memory Analysis,或者在Eclipse Market哪里搜索直接下载相关插件就可以了

    下面来看看是怎样一个分析过程:

    首先我们打开eclipse,双击项目下,刚才的分析文件,就可以打开分析编辑器,点击下图中的按钮,

    在打开的树种可以看到,其中某一项会占据内存比较多的,如果继续展开,会发现,这里会告诉你,那一项会是占据内存的主要原因,这里可以清楚地看到,demo的这个对象,有很多,说明创建这个demo的对象,没有被回收

  • 相关阅读:
    Linux Core Dump
    ODP.NET Managed正式推出
    获取EditText的光标位置
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1603 斯诺登的密码
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1036 选数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1012 拼数
    (Java实现) 洛谷 P1028 数的计算
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/10926172.html
Copyright © 2011-2022 走看看