Java 对象内的JVisualVM HeapDump OQL渲染数组

Java 对象内的JVisualVM HeapDump OQL渲染数组,java,jvisualvm,oql,Java,Jvisualvm,Oql,我正在尝试编写如下查询: select {r: referrers(f), count:count(referrers(f))} from com.a.b.myClass f 但是,输出不显示实际对象: { count = 3.0, r = [object Object] } 删除Javascript对象表示法再次正常显示引用器,但它们不再被划分。有没有一种方法可以在对象表示法中对其进行格式化?所以我知道你一年前问过这个问题,所以我不知道你是否还需要答案,但是因为我在四处搜索类似的东西,所以

我正在尝试编写如下查询:

select {r: referrers(f), count:count(referrers(f))}
from com.a.b.myClass f
但是,输出不显示实际对象:

{
count = 3.0,
r = [object Object]
}

删除Javascript对象表示法再次正常显示引用器,但它们不再被划分。有没有一种方法可以在对象表示法中对其进行格式化?

所以我知道你一年前问过这个问题,所以我不知道你是否还需要答案,但是因为我在四处搜索类似的东西,所以我可以回答这个问题。问题是referers(f)返回一个枚举,因此当您尝试将它放入hashmap时,它并不能很好地转换。我在做一个类似的分析,我试图找到唯一的字符数组(计算字符数组的唯一组合,直到前50个字符)。我想到的是:

var counts = {}; 
filter(
  map(
    unique(
      map(
        filter(heap.objects('char[]'), "it.length > 50"), // filter out strings less than 50 chars in length
        function(charArray) {  // chop the string at 50 chars and then count the unique combos
          var subs = charArray.toString().substr(0,50); 
          if (! counts[subs]) {
            counts[subs] = 1;
          } else {
            counts[subs] = counts[subs] + 1;
          }
          return subs;
        }
      ) // map
    ) // unique
  , function(subs) { // map the strings into an array that has the string and the counts of that string 
      return { string: subs, count: counts[subs] };
  }) // map
  , "it.count > 5000"); // filter out strings that have counts < 5000
var计数={};
滤器(
地图(
独特的(
地图(
筛选(heap.objects('char[]),“it.length>50”),//筛选出长度小于50个字符的字符串
函数(charArray){//将字符串切碎为50个字符,然后计算唯一的组合
var subs=charArray.toString().substr(0,50);
如果(!计数[subs]){
计数[subs]=1;
}否则{
计数[subs]=计数[subs]+1;
}
返回潜艇;
}
)//映射
)//唯一的
,函数(subs){//将字符串映射到一个包含字符串及其计数的数组中
返回{string:subs,count:counts[subs]};
})//映射
,“it.count>5000”);//过滤掉计数小于5000的字符串
这本质上说明了如何获取枚举(在本例中为heap.objects('char[]),并对其进行过滤和映射,以便计算统计信息。希望这对别人有帮助