Java 堆内存分析

本文介绍了Java堆内存分析工具jmap的使用,包括打印堆内存信息和导出堆内存到文件。同时,讲解了jhat如何建立服务器分析堆内存文件,并探讨了OQL语言在内存分析中的应用,如查询字符串等。通过对这些工具和语言的理解,可以帮助开发者更有效地诊断和优化Java应用程序的内存问题。
摘要由CSDN通过智能技术生成

Java 堆内存工具jmap

打印当前 Java 堆内存信息

jmap -histo[:live] <pid>
# 打印当前进程中类实例信息

导出Java 堆内存到文件

jmap -dump:live,format=b,file=heap.bin <pid>
# live 是否只打印存活对象,如果不指定,则会打印全部对象
# file 指定导出的文件路径,包含文件名称
# <pid> 指定 java 进程id
jmap -dump:live,format=b,file=heap.hprof 2848

Java 堆内存分析工具jhat

通过 jhat 命令我们可以建立一个服务器用于分析指定的堆内存文件

jhat [-port <port>] -J<flag> <file>
# jhat 指定要分析的堆内存文件
jhat -port 7000 -JXmx=1g heap.hprof
# -port 用于指定端口号,默认 7000
# -JXmx=1g 用于指定启动的Java服务,注意这里要大于dump的堆内存文件
# heap.hprof dump 出的堆内存文件

在这里插入图片描述
在这里插入图片描述

Java 对内存分析语言 OQL

我们可以通过 OQL对象分析语言来对内存进行分析操作.
在这里插入图片描述
OQL 语言的标准格式是这样的:

select <JavaScript expression to select>
         [ from [instanceof] <class name> <identifier>
         [ where <JavaScript boolean expression to filter> ] ]
-- 获取堆内存中全部字符串
-- 注意 select,from 等关键字要用小写
select x.value.toString() from java.lang.String x
-- 正则表达式查起来会很慢,最好不要用
select x.value.toString() from java.lang.String x
where /[\d\.]+/.test(x.value.toString())

使用 & 进行多条件查询

-- 查询字符串长度大于20且包含 Excepton 的字符串
-- select 展示多个值要用数组的方式拼接
select [s.value.toString(),s] 
from java.lang.String s 
where s.value.length>20 & /Exception/.test(s.value.toString())

在这里插入图片描述

参考资料

分析大文件Java堆内存快照
分析大文件Java堆内存快照
白灰——软件测试
JVM 对象查询语言(OQL)
Object Query Language (OQL)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值