2020 idea 查看内存消耗_查看运行时某个java对象占用JVM大小及通过idea查看java的内存占用情况...

一、如果想看运行时某个java对象占用JVM内存大小,可以先将对象转换成字节类型,然后计算:

List bizGroupRelatedEventInfos = bizEventVersionMapper.selectRelatedEventInfoByGroupIdsAndType(bizSdkGroupIds,

GroupPlatformType.SDK.getType());

System.out.println("bizGroupRelatedEventInfos集合内容转换成字符串:" + Arrays.toString(bizGroupRelatedEventInfos.toArray()));

System.out.println("bizGroupRelatedEventInfos集合大小:" + (Arrays.toString(bizGroupRelatedEventInfos.toArray()).getBytes().length/1024) + "KB");

打印出的字节数值,即为占用的JVM内存大小,可以通过除以1024进行单位转换

二、通过dump出内存信息到本地文件,并将文件解析通过浏览器访问:

1,打开idea的命令行窗口:点击底部选项栏中的“Terminal",即可切换到命令行窗口

2,在命令行中输入:jps,即可查看当前已启动的进程和对应的PID,如下

E:\CompanyProject\dongjian-ms-internal>jps

1536 RemoteMavenServer

12164 Launcher

12996 DongjianMsApplication

3828

5868 Jps

因为当前idea运行的项目是DongjianMsApplication(程序入口main方法所在类的类名),所以对就的PID就是12996

3,执行命令:jmap -dump:format=b,file=heap.bin 

E:\CompanyProject\dongjian-ms-internal>jmap -dump:format=b,file=heap.bin 12996

Dumping heap to E:\CompanyProject\dongjian-ms-internal\heap.bin ...

Heap dump file created

jmap 能查看jvm内存中,对象占用内存的情况,还提供非常方便的命令将jvm的内存信息导出的文件。

format=b是通过二进制的意思,-dump:format=b,file=heap.bin意思是:把内存结构全部dump到二进制文件heap.bin中。

4,执行命令:jhat -J-Xmx512m heap.bin   ,(ha指IBM的HeapAnalyzer)

E:\CompanyProject\dongjian-ms-internal>jhat -J-Xmx512m heap.bin

Reading from heap.bin...

Dump file created Tue Dec 11 10:37:54 CST 2018

Snapshot read, resolving...

Resolving 1630228 objects...

Chasing references, expect 326 dots..............................................................................................................................................................................

........................................................................................................................................................

Eliminating duplicate references.................................................................................................................................................................................

.....................................................................................................................................................

Snapshot resolved.

Started HTTP server on port 7000

Server is ready.

就可以将我们刚刚使用jmap导出的内存信息交给jhat解析了。默认的情况下,它会监听7000端口。我在本机的地址就是,http://localhost:7000/。

访问http://localhost:7000/histo/,大致可以看到一下的画面,这里列出对象,对象实例数量、总占用内存大小。点击进去之后可以看到“谁引用了这个对象,这个对象又引用了哪个”这些信息。不过因为展示的信息非常多,并没有想象中那样清晰可见。

————————————————

版权声明:本文为CSDN博主「未名who」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_2300688967/article/details/84951123

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值