Nashorn Javascript编译“eval”语句吗?

时间:2016-07-19 00:33:59

标签: javascript jvm jit nashorn

我知道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。

1 个答案:

答案 0 :(得分:1)

Nashorn总是将javascript编译为字节码以便执行。 JS没有解释器。是的,如果无法从活动对象访问,则编译/加载的类将被卸载。