我知道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 a-fresh的内容
当然这是一个小例子,其中eval字符串的内容只是一个方法调用,但想象一下,将更复杂的JS代码作为字符串传递给eval。
答案 0 :(得分:1)
Nashorn总是将javascript编译为字节码以便执行。 JS没有解释器。是的,如果无法从活动对象访问,则编译/加载的类将被卸载。