码迷,mamicode.com
首页 > 其他好文 > 详细

生成heap dump

时间:2014-11-26 13:32:17      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   io   ar   color   os   使用   sp   

  在查看内存泄露以及对内存问题中,要dump出当前内存堆存储快照,便于分析。有几种方法可以做,简介如下

一、intellij IDEA                                                      

  由于我用的是intellij IDEA,所以没有介绍Eclipse的配置,当然网上有很多种。

1、run->EditConfigurations

bubuko.com,布布扣

 

2、配置VM options,这里设置为JVM在遇到OOM(OutOfMemoryError)时生成Dump文件,-XX:+HeapDumpOnOutOfMemoryError  ,当然也可以设置dump出的文件路径-XX:HeapDumpPath=.../dump。同时这里我设置了限制堆的大小为20M,且不可扩展。

bubuko.com,布布扣

3、运行你的程序,便会生成heap文件,自动命名格式如:java_pid128.hprof

二、使用jmap工具                                                          

  jmap是jdk安装时自带的dump工具,但是使用时,要知道java程序的pid,使用格式为:

jmap -dump:file=D:\temp\heapdumps\dump.bin 1234

三、直接在程序中使用jmap                                              

  在程序中,为了获取我们需要引入 java.lang.management.ManagementFactory包.

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by pc on 14-11-25.
 */
public class HeapOOM {
    static class OOMObject{

    }
    public static void main(String [] args){
        String name = ManagementFactory.getRuntimeMXBean().getName();
        String pid = name.substring(0, name.indexOf("@"));
        String[] cmd = { "jmap ", "-dump:file=E:\\code\\src\\Java\\jvm\\heap\\dump\\dump1.bin", pid };
        try {
            Process p = Runtime.getRuntime().exec(cmd);
        } catch (IOException e) {
            e.printStackTrace();
        }
        List<OOMObject> list=new ArrayList<OOMObject>();
        while(true){
            list.add(new OOMObject());
        }
    }
}

 

生成heap dump

标签:des   style   blog   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/mingcaoyouxin/p/4122714.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!