Nashorn Javascript 是否编译 "eval" 语句?
Does Nashorn Javascript compile "eval" statements?
我知道 Nashorn 可以即时编译为 JVM 字节码。但是,当 Nashorn 遇到带有 String 的 eval 函数时,它会怎么做?它是编译字符串内容还是解释它?
例如:
function sayHi() {
console.log("hi world");
}
for (var i=0;i<10;i++) {
eval("sayHi()"); // what happens here?
}
几个选项可能是:
1) 它不在 eval 中编译字符串
2)它编译一次,缓存它,如果遇到相同的字符串(如上面的循环),则重复使用相同的字节码
3) 它每次都重新编译 eval String 的内容
当然这是一个小例子,其中 eval 字符串的内容只是一个方法调用,但想象一下将更复杂的 JS 代码作为字符串传递给 eval。
Nashorn 总是编译javascript 为字节码执行。 JS没有解释器。是的,如果活动对象无法访问,compiled/loaded 类 将被卸载。
我知道 Nashorn 可以即时编译为 JVM 字节码。但是,当 Nashorn 遇到带有 String 的 eval 函数时,它会怎么做?它是编译字符串内容还是解释它?
例如:
function sayHi() {
console.log("hi world");
}
for (var i=0;i<10;i++) {
eval("sayHi()"); // what happens here?
}
几个选项可能是: 1) 它不在 eval 中编译字符串 2)它编译一次,缓存它,如果遇到相同的字符串(如上面的循环),则重复使用相同的字节码 3) 它每次都重新编译 eval String 的内容
当然这是一个小例子,其中 eval 字符串的内容只是一个方法调用,但想象一下将更复杂的 JS 代码作为字符串传递给 eval。
Nashorn 总是编译javascript 为字节码执行。 JS没有解释器。是的,如果活动对象无法访问,compiled/loaded 类 将被卸载。