首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找实现java.security.Principal的实例的OQL

查找实现java.security.Principal的实例的OQL
EN

Stack Overflow用户
提问于 2014-01-30 22:25:19
回答 2查看 1K关注 0票数 1

这似乎不会从Netbeans (它具有与VisualVM相同的堆分析工具)返回任何结果:

代码语言:javascript
复制
select x.name from java.security.Principal x

如果我输入一个实现了Principal的具体类的名称,那么这个查询就可以工作了,但是我需要所有的实现。

在Eclipse Memory Analyzer中尝试相同的方法,得到相同的结果。

有什么线索吗?

EN

回答 2

Stack Overflow用户

发布于 2014-02-13 20:53:36

堆转储不包含实现特定接口的类的信息。堆转储中唯一可用的信息是关于超类的。NetBeans分析器可以克服这一缺点-如果您在分析或监控NetBeans项目时进行堆转储,它可以计算实现项目特定接口的类。

票数 2
EN

Stack Overflow用户

发布于 2015-12-25 03:35:12

JHAT OQL 'instanceof' operator does not work with interface types错误已关闭,因为不会修复,因为当前的堆转储格式没有此类信息。这里有:

bt2:解决方法

手动查找堆快照中所有可用的实现类(例如,通过搜索JAR文件)。除了查找所有可能的impl类的困难和不可靠之外,结果将不会非常令人满意,因为您必须

  1. 为每个实现类运行单独的OQL查询,这使得很难在一个地方看到所有结果。

  1. 使用'from Object o‘并通过检查类型来过滤结果,这很可能非常慢,因为它会遍历堆中的每个对象。

如果您对类名或包有一些猜测,您可以使用如下查询来查找合适的候选者:

代码语言:javascript
复制
filter(heap.classes(), "/org\\.hibernate\\.cfg\\.naming/(it.name)")

您可以通过以下方式保存搜索结果:

代码语言:javascript
复制
x = toArray(filter(..., ...))

然后查询明细信息,无需等待原始查询:

代码语言:javascript
复制
map(x, "{cl: it, sub: it.subclasses(), sup: it.superclasses()}")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21459087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档