JDK 8 Rhino Javascript 引擎限制

JDK 8 Nashorn Javascript Engine limitation

我要搬到 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。这是否已在更新的 JDK 版本中修复,现在 9 和 10 可用?

Nashorn 在 Java11.

中被弃用

今天最好的选择是 GraalVM