我很想知道为什么 visualvm OQL 对以下语句有问题:
select filter(heap.objects("java.util.HashMap"), isTrue(it));
function isTrue(object) {
return true;
}
例外是:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "it" is not defined. (#1)
相比之下,visualvm OQL 对以下任何示例都没有问题:
示例 1(注意“它”没有被引用):
select filter(heap.objects("java.util.HashMap"),
function(it) {
return true;
});
示例 2(注意“it”被引用):
select filter(heap.objects("java.util.HashMap"), isTrue("it"));
function isTrue(object) {
if (object instanceof String) {
throw "String passed!";
}
return true;
}
示例 3(“function(it)”出于某种原因在 OQL 中特别处理?):
select filter(heap.objects("java.util.HashMap"), function(it) { return isTrue(it); });
function isTrue(object) {
return true;
}
我问这个是因为它似乎不直观,并且当我尝试创建可用的东西时,非直观行为的变化会出乎意料地出现并减慢我的速度。