我正在迁移到JDK 8,不得不使用Nashorn来处理JS文件。
我曾经能够使用JDK7Rhino JS engine处理一个具有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版本,这个问题是否得到了修复?
发布于 2018-08-25 06:08:01
Nashorn在Java 11中已被弃用。
目前最好的替代方案是GraalVM。
https://stackoverflow.com/questions/51864070
复制相似问题