- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很想知道为什么 visualvm OQL 对以下语句有问题:
select filter(heap.objects("java.util.HashMap"), isTrue(it));
function isTrue(object) {
return true;
}
异常(exception)是:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "it" is not defined. (#1)
相比之下,visualvm OQL 对以下任何一个例子都没有问题:
示例 1(注意“it”未被引号):
select filter(heap.objects("java.util.HashMap"),
function(it) {
return true;
});
示例 2(注意“它”被引用):
select filter(heap.objects("java.util.HashMap"), isTrue("it"));
function isTrue(object) {
if (object instanceof String) {
throw "String passed!";
}
return true;
}
示例 3(出于某种原因在 OQL 中专门处理了“function(it)”?):
select filter(heap.objects("java.util.HashMap"), function(it) { return isTrue(it); });
function isTrue(object) {
return true;
}
我问这个是因为它看起来不直观,而且非直观行为的变体会意外出现,并在我尝试创建可用的东西时拖慢我的速度。
最佳答案
您的不同语法不是等效的。第一个:
select filter(heap.objects("java.util.HashMap"), isTrue(it));
电话 isTrue
参数为 it
并将其结果传递给filter()
功能。那时你没有变量 it
定义,因此错误。
您的“示例 1”和“示例 3”都将一个函数作为第二个参数传递给 filter()
功能。您传入的函数(大概)旨在作为 filter()
的回调。将调用,其中参数 it
将由 filter()
设置.
您的“示例 2”有点像第一个代码,它调用 isTrue("it")
立即,但在这种情况下,它使用字符串文字调用它,因此您不会遇到未定义参数的问题。然而,这又是将函数的结果作为参数传递给 filter()
。而不是传递函数本身。
filter()
的正确用法 是向它传递一个函数(函数引用 - 函数名称 不带 括号 - 或像“示例 1”中那样的函数表达式)。所以请尝试以下操作:
select filter(heap.objects("java.util.HashMap"), isTrue);
function isTrue(object) {
return true;
}
// OR your example 1
关于javascript - 为什么在 visualvm(jhat?)oql 中使用 javascript 有时会令人困惑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460213/
我有一个内存转储文件,JHAT 给出了以下消息,我无法分析任何内容(因为没有显示任何数据。 Resolving 0 objects... WARNING: hprof file does not
如何在 jhat OQL where 子句中执行连词 [AND]? 我想这样做: select s from sun.security.x509.X500Name s where s.canonic
谁能举例说明如何在 select 语句中使用 heap.heapForEachClass?如果您可以提供一些包含不同查询示例的链接(当然除了 oqlhelp 页面中的链接 :) ) 最佳答案 我不认为
我在堆转储上运行了 jhat,它生成了报告。我如何使用报告来分析堆。除了实例计数之外,我无法完全理解。是否有任何引用或案例研究。简而言之,我需要继续前进,我该怎么做? 还有什么是对象查询语言。 最佳答
1. 使用背景 在前面jstat命令的介绍中,我们知道了可以用它来轻松的了解到线上系统中JVM的各种运行情况和指标。 但是如果有时候发现jvm中新增对象的速度很快,想要知道是什么对象新增这么快;或
我知道jmap是用来创建堆转储的,同样可以用Jhat来分析。 jVisualVM 也可用于分析堆转储(并且可以执行更多任务,例如分析等)。 但是使用 jHat 和 visualVM 分析堆转储之间有什
我正在尝试分析从遇到内存问题的 Java 进程中获取的堆转储。转储是使用 jmap 获取的。我在转储文件上使用 jhat - 我得到了 java.io.IOException:无法识别的魔数(Magi
我有一个 64 位 JVM 使用 -XX:-HeapDumpOnOutOfMemoryError 选项转储的 6.5GB Hprof 文件。我把它放在一台 16GB 的 64 位机器上,并试图将它放入
为什么每个对象都被标记为新的,而不仅仅是第二个快照中但不在我的基线快照中的对象?在网上查看时,我看到一些建议我需要使用 hprof 而不是 jmap 来制作我的内存转储,但 hprof 似乎以完全相同
我很想知道为什么 visualvm OQL 对以下语句有问题: select filter(heap.objects("java.util.HashMap"), isTrue(it)); functi
我们的 EA 中出现内存错误,我们使用 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/some/dir 在 OOM 时转储堆。 我
我经常展示 jhat,jps和 jstack 工具集,供 Linux 和 Mac 上的开发人员使用。但是,开发人员最近表示,如果有问题的 Java 应用程序作为 Windows Service 运行,
这是我第一个发布的问题。我有一个相当复杂的 OQL 查询,其中列出了包中加载的类的静态字段。我在针对 Java 1.6.0_24 的“jhat”运行查询时遇到的一个问题是“unique”函数无法按预期
我是一名优秀的程序员,十分优秀!