javascript - Nashorn Javascript 是否编译 "eval"语句?

标签 javascript jvm jit nashorn

据我所知,Nashorn 会动态编译为 JVM 字节代码。但是,当 Nashorn 遇到带有字符串的 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 中。

最佳答案

Nashorn 始终将 javascript 编译为字节码以供执行。 JS 没有解释器。是的,如果无法从事件对象访问已编译/加载的类,则会卸载它们。

关于javascript - Nashorn Javascript 是否编译 "eval"语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38447865/

相关文章:

java - G1 old generation committed 内存突然增加,Eden size 减少

java - 我怎样才能从不同的线程 "capture"System.exit(-1)?

javascript - 与express js一起使用的synchronize.js

java - 如何区分 kotlin 中绑定(bind)的可调用成员引用和相同类型的函数?

javascript - 使用 Typescript 将一个对象文字映射到另一个对象文字

python - LoweringError 是什么意思?

java - 可以阻止 JIT 优化方法吗?

java - 为什么要解释java字节码?

javascript - localstorage刷新页面保存

javascript - 使用 PHP 打开图片文件时防止新 session