JDK 8 Nashorn Javascript Engine限制

时间:2018-08-15 18:03:42

标签: javascript java java-8 nashorn capacity

我要移至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版本中解决?

1 个答案:

答案 0 :(得分:1)

Nashorn在Java 11中已被弃用。

今天最好的选择是GraalVM