栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用oql进行Java堆分析:计算唯一字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用oql进行Java堆分析:计算唯一字符串

以下内容基于Peter Dolberg的回答,可以在VisualVM OQL控制台中使用:

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;    }   }  );

首先使用

map()
对所有String实例的调用,然后为每个String创建或更新
counts
数组中的对象。每个对象都有一个
string
和一个
count
字段。

结果数组将为每个String实例包含一个条目,每个条目的

count
值都比同一String的上一个条目大。然后将结果在
count
字段上排序,结果看起来像这样:

{count = 1028.0,string = *null*}{count = 1027.0,string = *null*}{count = 1026.0,string = *null*}...

(在我的测试中,字符串

"*null*"
是最常见的)。

最后一步是使用一个函数对它进行过滤,该函数对于每个String的首次出现都返回true。它使用

alreadyReturned
数组来跟踪已包含哪些字符串。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470134.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号