visualvmOQLに次のステートメントで問題がある理由を知りたいです。
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(「それ」が引用されていることに注意してください):
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;
}
直感的ではないようで、直感的でない動作のバリエーションが予期せず表示され、使用可能なものを作成しようとすると速度が低下するため、これを尋ねます。