Java heap dump OQL samples - where
where 可以包含:
=, <=, >, <, [ NOT ] LIKE, [ NOT ] IN, IMPLEMENTS (relational operations)
AND OR != , =
字段可以 [. ] . .
- SELECT * FROM java.net.URL u where u.port = 443
- SELECT * FROM java.net.URL u where toString(u.host) = "api.google.com"
- SELECT * FROM java.net.URL u where u.@displayName like ".api.google.com."
- SELECT * FROM "com.tianxiaohui." u where toString(u) like ".Metrics.*" //正则
- SELECT toString(u.string) FROM java.net.URI u WHERE (toString(u.schemeSpecificPart) LIKE ".+google.com.+")
- SELECT x.capacity FROM java.nio.DirectByteBuffer x WHERE ((toString(x.att) = "null") and (toString(x.cleaner) != "null") and (x.capacity >= (1024 * 1024)))
- SELECT DISTINCT objects x.this$0 FROM java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask x
- SELECT distinct objects x FROM java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask x WHERE (x.this$0.toString() LIKE ".+0x468369b50")
- SELECT * FROM INSTANCEOF java.lang.Object t WHERE (toHex(t.@objectAddress) >= "0xfbd4c000" AND toHex(t.@objectAddress) <= "0xfce94050") //一段地址空间中的所有对象
如何在MAT里使用OQL 做到group by - count的效果?
使用OQL之后, 在OQL的Tab 里, 可以看到菜单栏有个 导出 的Icon, 可以导出为HTMl, CSV, TXT. 导出CSV,使用Excel做count.
如果 0x789342b78 对应的地址是一个类class(不是instance), 那么可以用下面这种查法:
select * from 0x789342b78
如果要查询某个 Class 的 static 字段里面的数据:
SELECT * FROM java.lang.Class x where x.toString() LIKE ".+com.tianxiaohui.platform.config.impl.ConfigProvider.*"
内置函数:
- toHex( number ) //转换数字为16进制
- toString( object ) //转换对象为 String
- dominators( object ) //被这个对象直接控制的
- dominatorof( object ) //这个对象被那些对象直接控制
- outbounds( object ) //
- inbounds( object ) //
- classof( object ) // 当前对象的类