java heap analysis with oql: Count unique strings

前端 未结 6 991
自闭症患者
自闭症患者 2020-12-29 09:11

Im doing a memory analysis of an existing java software. Is there a sql \'group by\' equivalent in oql to see the count of objects with same values but different instances.<

6条回答
  •  既然无缘
    2020-12-29 09:46

    Just post my solution and experience when doing similar issue for other references.

    var counts = {};
    var alreadyReturned = {};
    top(
    filter(
        sort(
            map(heap.objects("java.lang.ref.Finalizer"),
                function (fobject) {
                    var className = classof(fobject.referent)
                    if (!counts[className]) {
                        counts[className] = 1;
                    } else {
                        counts[className] = counts[className] + 1;
                    }
                    return {string: className, count: counts[className]};
                }),
            'rhs.count-lhs.count'),
        function (countObject) {
            if (!alreadyReturned[countObject.string]) {
                alreadyReturned[countObject.string] = true;
                return true;
            } else {
                return false;
            }
        }),
        "rhs.count > lhs.count", 10);
    

    The previous code will output the top 10 classes used by java.lang.ref.Finalizer.
    Tips:
    1. The sort function by using function XXX is NOT working on my Mac OS.
    2. The classof function can return the class of the referent. (I tried to use fobject.referent.toString() -> this returned a lot of org.netbeans.lib.profiler.heap.InstanceDump. This also wasted a lot of my time).

提交回复
热议问题