我正在对现有的Java软件进行内存分析。在oql中是否存在等效的sql’group by’,以查看具有相同值但不同实例的对象的数量。
通过s.toString()从java.lang.String的组中选择count(*)
我想获得一列重复的字符串以及重复的数量。这样做的目的是查看大量的案例,以便可以使用String.intern()对其进行优化。
例:
"foo" 100
"bar" 99
"lazy fox" 50
等等…
以下内容基于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
数组来跟踪已包含哪些字符串。
问题内容: 更新 :已添加 我想对我的ElasticSearch集群执行唯一计数。该集群包含约5000万条记录。 我尝试了以下方法: 第一种方法 在本节中提到: 预计算哈希通常仅在非常大和/或高基数的字段上有用,因为它可以节省CPU和内存。 第二种方法 在本节中提到: 除非您将Elasticsearch配置为使用doc_values作为字段数据格式,否则使用聚合和构面对堆空间的要求 非常 高。 我
问题内容: 我正在用Java 7中的转义分析进行一些测试,以便更好地了解哪些对象可以进行堆栈分配。 这是我编写的用于测试堆栈分配的代码: 这是它在Linux上与Java 7一起输出的结果 我正在使用GC日志来了解是否在堆栈上分配了对象,这可能不是100%可靠的,但似乎给出了很好的提示。 基于输出,堆栈分配适用于test1,test3,test4和test6,不适用于test2和test5。我不明白
我有一张excel表格,里面有一些时间值。这些值是格式化为字符串的持续时间。当我尝试对这些值求和时,结果是0,因为Excel不能对字符串求和。当我点击公式栏上的回车键时,它确实变成了一个时间,所以我计算出的总和是有效的。如何将单元格的值从字符串更改为时间值?我已经将日期格式设置为和 我从转换成秒的时间量开始,我将其转换成持续时间 然后我使用 然后我将单元格值设置为刚刚生成的字符串 然后我将设置为一
问题内容: 我有以下形式的数据: 组内的非空值始终相同。我想对每个组(如果存在)的非空值进行一次计数,然后找到每个值的总数。 我目前正在以以下方式(笨拙和低效)进行此操作: 我敢肯定,有一种方法可以更干净地执行此操作,而无需使用循环,但是我似乎无法解决问题。任何帮助将非常感激。 问题答案: 我认为您可以使用: 的另一种解决方案,然后创建new by ,将其重塑为by和last :
我试图分析我的Java applet的堆转储,它耗尽了堆空间,即使我增加堆大小,如本文所示。applet:Java堆空间 今天上午我做了一些堆转储(是的...它可能做数字转储),我试图用MAT和Visual VM1.3.5来分析它们。运行泄漏测试后,主要的怀疑对象是org.eclipse.jdt.internal.core.javaModelManager和org.eclipse.jst.jee.
关联分析 关联分析是一种在大规模数据集中寻找有趣关系的任务。 这些关系可以有两种形式: 频繁项集(frequent item sets): 经常出现在一块的物品的集合。 关联规则(associational rules): 暗示两种物品之间可能存在很强的关系。 相关术语 关联分析(关联规则学习): 从大规模数据集中寻找物品间的隐含关系被称作 关联分析(associati analysis) 或者