我遇到了 Rhino在通过javax.script.ScriptEngineAPI 运行Rhino时抛出"编译脚本时遇到的代码生成错误:方法生成的字节码超过64K限制"异常的问题.接受的解决方案似乎是要调用setOptimizationLevel(-1)的sun.org.mozilla.javascript.Context.
不幸的是,我似乎无法访问由Context该创建的ContextFactory.我曾尝试加入ContextFactory.Listener到ContextFactory.getGlobal()将修改Context创建之后,但我的听众似乎永远不会被调用.我还看了一下来自Java 6的RhinoScriptEngine源,看看是否有一个我可以设置的属性,ContextFactory以便确定优化级别的值.
据我所知,在Java 7中,RhinoScriptEngine设置优化级别-1默认,并能够通过设置的优化级别rhino.opt.level属性.比较makeContext()方法在Java 7的版本与makeContext()在方法的Java 6版本,看看我的意思.
据我所知,我认为我最好的选择是直接运行Rhino,如使用Rhino运行CoffeeScript编译器的示例所示.虽然你可以看到,代码很麻烦,所以javax.script.ScriptEngine如果可能的话,我宁愿使用API,同时继续支持Java 6.还有其他选择吗?
不,根据文档:http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html#jsengine
其中说:
由于占地面积和安全原因,一些组件被排除在外:
- JavaScript 到字节码的编译(也称为“优化器”)。此功能依赖于类生成库。删除此功能意味着JavaScript 将始终被解释。删除此功能不会影响脚本执行,因为优化器是透明的。
优化器类已被排除在外,因为它与 JDK6 捆绑在一起,因此无法为 java 6 设置优化级别。
| 归档时间: |
|
| 查看次数: |
4538 次 |
| 最近记录: |