`
javamonkey
  • 浏览: 169038 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

内存分析OQL的几个例子

阅读更多

老发表beetl的更新日志,我也烦了,近期不忙,正好贡献点其他经验出来吧:


解决内存泄露的一个方法是分许heap dump文件,可以参考 http://visualvm.java.net/oqlhelp.html

我自己总结了一下以后可能用到的一些OQL,如下:

查找所有包含指定类的list

heap.objects(heap.findClass("java.util.ArrayList"),true, function(it){
if(it.size<=0){
return false ;
}
var i=0;
var data = it.elementData[0];
var className = classof(data).name;
if(isClass(className)){
return true
}else{
return false;
}

} )

function isClass(name){
var pattern = /com.netease/ ;
var result = pattern.exec(name);
return result!=null;
}

查找业务类直接或者间接引用的list

select filter(heap.livepaths(s),function(it){

var array = it ;
var i= 0;
var size = array.length;
for(;i<size;i++){
var className = classof(array[i]).name;
if(isClass(className)){
return true
}else{
return false;
}
}
return true ;


}) 
from java.util.ArrayList s

 

查找包含内容最多的List,这个应该是查找内存泄露的好语句
map(top(heap.objects('java.util.ArrayList'), 'rhs.size - lhs.size', 5),"toHtml(it)+'='+it.size")

查找当前系统属性
map(heap.objects(heap.findClass("com.netease.Main")),"it.size")

查找同样内容最多的string
var counts={};
var alreadyReturned={};

filter(
sort(
map(heap.objects("java.lang.String"),
function(heapString){
if( ! counts[heapString.toString()]){
counts[heapString.toString()] = 1;
} else {
counts[heapString.toString()] = counts[heapString.toString()] + 1;
}
return { string:heapString.toString(), count:counts[heapString.toString()]};
}), 
'lhs.count < rhs.count'),
function(countObject) {
if( ! alreadyReturned[countObject.string]){
alreadyReturned[countObject.string] = true;
return true;
} else {
return false;
}
}
);

分享到:
评论

相关推荐

    OQL基本教程(个人笔记)

    一个基本的OQL查询语句通常由以下几个部分组成: - `SELECT`:指定要查询的对象或属性。 - `FROM`:指定查询的源,即对象或对象集。 - `WHERE`:条件子句,用来过滤满足特定条件的对象。 - `ORDER BY`:排序结果,...

    Macrobject OQL.NET 对象查询语言

    OQL.NET 是一套强类型的数据库对象查询语言 (OQL,Object Query Language),和 SQL 以及其它 OQL 不同的是,OQL.NET 基于宿主语言 (基于 C# 和 VB 等原生 .NET 语言而不是字符串)。OQL.NET 兼容 SQL-92 标准。  ...

    OQL应用指南

    在这个例子中,查询是从指定的面向对象模型(UFIDA::U9::MO::MO::MO)中选择特定属性,并通过where子句过滤出特定部门名称的记录,最后以实际完成日期排序。 OQL的应用场景包括简单的条件过滤和复杂报表查询。其...

    MAT内存分析工具.zip

    在给定的压缩包“MAT内存分析工具.zip”中,包含了两个不同版本的MAT:MemoryAnalyzer-1.7.0.20170613-linux.gtk.x86_64.zip和MemoryAnalyzer-1.10.0.20200225-linux.gtk.x86_64.zip。这两个版本分别对应于2017年6月...

    mat内存分析工具,最新(20161215)

    MAT,全称Memory Analyzer Tool,是由Eclipse基金会开发的一款强大的Java堆内存分析工具。这款工具在2016年12月15日更新的版本,对于Java开发者来说,是诊断和解决内存泄漏问题的重要助手。MAT提供了丰富的功能,...

    内存泄漏分析工具mat

    通过解析heap dump,MAT能够展示对象的分配路径、引用链以及对象的大小,这些信息对于定位内存泄漏的源头至关重要。 1. ** dominator tree**:MAT的核心功能之一是Dominator Tree视图。这个视图显示了内存中的对象...

    (三)MATJVM 内存分析工具.MAT JVM 内存分析工具

    4. **OQL(Object Query Language)**:MAT内置的一种查询语言,允许用户查询heap dump中的对象和数据,类似于SQL,但针对内存分析。 5. **Shallow Heap和Retained Heap**:这两个指标分别表示对象自身占用的内存和...

    eclipse 内存分析工具(MAT) 1.2.1

    MAT 1.2.1是该工具的一个版本,提供了更稳定和高效的内存分析功能。在这个压缩包文件中,我们可以找到MAT的相关文档、配置和组件。 1. `notice.html` 和 `index.html`:这两个文件通常是软件的许可证通知和用户界面...

    MAT JVM 内存分析工具.

    MAT JVM内存分析工具有以下几个核心功能和知识点: 1. **快照分析**:用户可以创建JVM进程的内存快照,这包含了运行时的所有对象和它们之间的引用关系。快照可以保存以便后续分析,这对于远程服务器或不再运行的...

    java内存泄露分析工具 eclipse3.5插件

    总之,"java内存泄露分析工具 eclipse3.5插件"是一个强大的分析工具,能有效地帮助Java开发者诊断和修复内存问题,提升应用的性能和稳定性。结合Eclipse 3.5,这个插件为开发环境带来了强大的内存分析能力,使得问题...

    MemoryAnalyzer 内存分析 MAT

    支配树上的每个节点表示一个对象,节点的大小表示其占用的堆内存,通过查看支配树,可以快速找到内存的主要消耗者。 2. **Leak Suspects报告**:MAT会自动分析heap dump,生成Leak Suspects报告,列出可能的内存...

    mac mat jvm gc 内存分析

    在进行内存分析时,MAT的几个关键功能不容忽视: - Leak Suspects报告:MAT会自动分析heap dump,提供可能的内存泄漏嫌疑对象,节省了开发者手动排查的时间。 - Dominator Tree:显示了内存中所有对象的支配关系,...

    基于eclipse的java内存分析工具MAT

    Java内存分析是优化应用程序性能和解决内存泄漏问题的关键步骤,尤其在使用Eclipse IDE时,MAT(Memory Analyzer Tool)是一个非常强大的工具。MAT基于Eclipse平台,为Java开发者提供了深入的内存剖析功能,帮助我们...

    java使用JMAP定位代码内存泄漏在哪

    JMAP是Java自带的一个命令行工具,它提供了对Java堆内存的详细分析功能,可以帮助我们诊断内存泄漏。JMAP的主要功能包括: 1. **生成堆转储文件**:通过`jmap -dump:format=b,file=&lt;filename&gt; &lt;pid&gt;`命令,我们可以...

    ubuntu 14.0 MAT 内存分析工具

    MAT(Memory Analyzer Tool)是Eclipse基金会开发的一款强大的Java内存分析工具,特别适用于诊断和优化Java应用程序的内存管理问题。它可以帮助开发者定位内存泄漏、分析堆转储文件,从而提高应用的性能和稳定性。在...

    eclipse MAT 内存分析工具

    Eclipse Memory Analyzer (MAT) 是一个强大的内存分析工具,尤其对于Java开发者来说,它是一个不可或缺的调试利器。MAT主要用于诊断Java应用程序的内存泄漏问题,帮助优化内存使用效率。这款工具由Eclipse基金会开发...

    MemoryAnalyzer-1.5.0内存分析工具.zip

    【MemoryAnalyzer-1.5.0内存分析工具.zip】是一个包含MemoryAnalyzer工具的压缩包,该工具主要用于JAVA应用程序的内存泄漏检测和分析。在深入探讨这个工具之前,我们需要理解内存泄漏的基本概念及其对软件性能的影响...

    android_内存泄露分析_mat[归纳].pdf

    - **OQL查询**:MAT支持一种类似于SQL的语言,用于查询堆内存中的对象和属性,这为深入分析提供了强大的工具。 通过熟练使用MAT,开发者可以有效地识别和修复Android应用中的内存泄露,提高应用的稳定性和性能。...

    Java内存泄漏排除工具mat

    为了有效地排查和解决这类问题,开发者通常会借助专业工具,而“Java内存泄漏排除工具MAT”(Memory Analyzer Tool)就是一个强大的诊断工具。MAT是由Eclipse基金会开发的,用于分析Hprof格式的堆转储文件,帮助...

    android内存管理-MAT与防范手段

    - OQL(Object Query Language):查询内存中的对象信息。 四.MAT 使用实例 1. 生成 heap dump:在DDMS中选择目标应用,点击“Dump HPROF file”按钮获取heap转储。 2. 用 MAT 分析 heap dumps:打开MAT,导入....

Global site tag (gtag.js) - Google Analytics