java - VisualVM 堆转储 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 对象表示法再次正常显示引荐来源网址,但它们不再划分。有没有办法在对象表示法中格式化它?

最佳答案

所以我看到你一年前问过这个问题,所以我不知道你是否仍然需要答案,但由于我一直在寻找类似的东西,所以我可以回答这个问题。问题是 Referrers(f) 返回一个枚举,因此当您尝试将其放入 HashMap 中时,它并不能很好地转换。我正在做类似类型的分析,试图找到唯一的 char 数组(计算 char 数组的唯一组合最多前 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

这本质上展示了如何获取枚举(在本例中为 heap.objects('char[]'))并过滤它并映射它,以便您可以计算它的统计信息。希望这对某人有帮助。

关于java - VisualVM 堆转储 OQL 渲染对象内的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25513334/

相关文章:

java - 我收到了关于计算每小时英里数的作业,但我的运行程序似乎无法找到我的时间变量

java - 设置基于 Spring security 的 OAuth2 服务器

Java 8 - 如何从列表中获取对象的多个属性?

java - Jvisualvm显示cpu使用率大于处理器数量

java - 如何使用 OQL 查找堆上最旧的实例

java.lang.OutOfMemory错误: Java heap space while reading Excel file into java bean using XLSReader

java - 关于线程和 JVisualVM

java - 如何监控java应用程序的堆栈使用情况

salesforce - 分层 SOQL 查询

java - 有没有办法在mat中使用OQL获取无法访问的对象?