写在前面

该命令可用于查看虚拟机中对象实例数以及占用空间大小,生成堆转储文件,之后结合jvirsualvm等工具进行可视化查看,辅助定位程序的内存异常问题。

  • 测试代码
public class ManyObj {
    private static List<People> peopleList = new ArrayList<>();

    public static void main(String[] args) throws Exception {
        System.out.println("test begin");
        IntStream.rangeClosed(1, 99999).forEach(__ -> peopleList.add(new People()));
        System.out.println("test end");
        System.in.read();
    }
}

1:获取对象实例数

$ jmap -histo 26396

 num     #instances         #bytes  class name
----------------------------------------------
   1:         99999        1599984  dongshi.daddy.zhengxi.People
   2:           950         479976  [Ljava.lang.Object;
   3:          5138         479224  [C
   ...

class name:类名称,[C is a char[],[S is a short[],[I is a int[],[B is a byte[],[[I is a int[][]。

2:查看堆信息

在这里插入图片描述

3:生成堆转储文件并可视化

3.1:生成堆转储文件

$ jmap -dump:live,format=b,file=d:\\test\\manyobjdump.hprof 26396
Dumping heap to D:\test\manyobjdump.hprof ...
Heap dump file created

在这里插入图片描述

3.2:可视化查看

我们使用jvisualvm来查看文件->载入
在这里插入图片描述

写在后面

jmap-查看实例个数以及占用内存大小

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐