这似乎没有返回NetBeans的任何结果(具有与VisualVM相同的堆分析工具):
select x.name from java.security.Principal x
如果我放置了实施原理的具体类的名称,则查询有效,但我需要所有实现。
在Eclipse内存分析仪中尝试了相同的结果。
有任何线索?
HEAP DUMP没有任何类实现特定接口的信息。堆转储中唯一可用的信息是关于超类。Netbeans Profiler可以克服此缺点 - 如果您在堆积或监视Netbeans项目时进行了堆转储,它可以计算从项目中实现特定接口的类。
jhat oql'instanceof'运算符与接口类型bug闭合,因为不会修复,因为当前的堆转储格式没有此类信息。有:
bt2:围绕
工作手动查找Heap快照中可用的所有实现类(例如,通过JAR搜索文件)。除了找到所有可能的IMP类的困难和不可靠性外,结果不会令人满意,因为您被迫要么
- 为每个实现类运行一个单独的OQL查询,因此很难看到所有结果地点。
或
- 使用'来自对象o'并通过检查类型过滤结果,这可能是由于它会穿越堆中的每个物体。
如果您对班级名称或软件包有一些猜测,则可以使用这样的查询来查找适当的候选者:
filter(heap.classes(), "/org\.hibernate\.cfg\.naming/(it.name)")
您可以通过以下方式保存搜索结果:
x = toArray(filter(..., ...))
然后查询详细信息,而无需等待原始查询:
map(x, "{cl: it, sub: it.subclasses(), sup: it.superclasses()}")