【问题标题】:JDK 8 Nashorn Javascript Engine limitationJDK 8 Nashorn Javascript 引擎限制
【发布时间】:2019-01-22 15:32:45
【问题描述】:

我要转移到JDK 8 并且不得不使用Nashorn 来处理JS 文件。

我曾经能够使用 JDK 7 Rhino JS 引擎处理具有 1 个巨大功能的 300MB 文件。需要注意的是,300MB 是由我的工具处理的生成文件,我知道在大文件中包含单个大函数不是一个好习惯。

现在我做不到了,我得到了java.lang.runtimeException: Class file too large!,带有以下堆栈跟踪:

 at  jdk.nashorn.internal.codegen.CompilationPhase$BytecodeGenerationPhase.transform(CompilationPhase.java:431)
 at  jdk.nashorn.internal.codegen.CompilationPhase.apply(CompilationPhase.java:624)
 at  jdk.nashorn.internal.codegen.Compiler.compile(Compiler.java:655)
 at  jdk.nashorn.internal.runtime.RecompilableScriptFunctionData.compileTypeSpecialization(RecompilableScriptFunctionData.java:725)
 at  jdk.nashorn.internal.runtime.RecompilableScriptFunctionData.getBest(RecompilableScriptFunctionData.java:905)
 at  jdk.nashorn.internal.runtime.ScriptFunctionData.getGeneric(ScriptFunctionData.java:384)
 at  jdk.nashorn.internal.runtime.ScriptFunctionData.createGenericInvoker(ScriptFunctionData.java:282)
 at  jdk.nashorn.internal.runtime.ScriptFunctionData.getGenericInvoker(ScriptFunctionData.java:276)
 at  jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:620)
 at  jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:494)
 at  jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393)
 at  jdk.nashorn.api.scripting.ScriptObjectMirror.callMember(ScriptObjectMirror.java:199)
 at  jdk.nashorn.api.scripting.NashornScriptEngine.invokeImpl(NashornScriptEngine.java:386)
 at  jdk.nashorn.api.scripting.NashornScriptEngine.invokeFunction(NashornScriptEngine.java:190)

我知道文件大小很荒谬,但它曾经在Rhino 上运行,我想知道Nashorn 的大小限制是什么以及是否有任何方法可以克服这个问题。

我正在使用 JDK 8u181。现在有 9 和 10 可用,这在较新的 JDK 版本中是否已修复?

【问题讨论】:

  • Nashorn 创建 JVM 字节码,因此与 Java 限制相同。
  • @Pointy 感谢您指出这一点。我现在明白了。
  • @NomanKhan 我在问我的问题之前已经看过那篇帖子,并认为这与我的问题有点不同。显然不是。他们虽然没有找到解决办法。是否计划增强或修复?我有什么办法可以解决这个问题?

标签: javascript java java-8 nashorn capacity


【解决方案1】:

Nashorn 在 Java 11 中已被弃用。

今天最好的选择是GraalVM。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2017-07-09
    • 2018-09-19
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多