我正在使用Rhino1.7R4作为我的项目。通过将Rhino的优化级别从0设置为-1(因为我不需要生成额外的类文件),我将得到意想不到的结果。
在Rhino代码中,在Codegen类下根据优化级别集进行一些额外的处理。
if (optLevel > 0) {
/*
* Collect all of the contained functions into a hashtable
* so that the call optimizer can access the class name & parameter
* count for any call it encounters
*/
if (tree.getType() == Token.SCRIPT) {
int functionCount = tree.getFunctionCount();
for (int i = 0; i != functionCount; ++i) {
OptFunctionNode ofn = OptFunctionNode.get(tree, i);
if (ofn.fnode.getFunctionType()
== FunctionNode.FUNCTION_STATEMENT)
{
String name = ofn.fnode.getName();
if (name.length() != 0) {
if (possibleDirectCalls == null) {
possibleDirectCalls = new HashMap<String,OptFunctionNode>();
}
possibleDirectCalls.put(name, ofn);
}
}
}
}
}这是我在Rhino中唯一能找到的额外代码,如果opt级别> 0,这将是一些额外的字节码优化。但我正在将用例中的优化级别从0更改为-1,以便使用Rhino的解释器模式。
因此,我的问题是,当优化级别从0更改为-1时,犀牛会对字节代码做什么更改?
提前谢谢。
发布于 2015-10-20 17:19:05
这个文档仍然更新了Rhino中的各种优化级别:
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Optimization
实际上,当您将优化级别设置为-1时,您将Rhino切换到解释模式,这意味着它执行代码的路径与编译模式下的路径不同。当然,解释模式比编译模式慢得多。我们在Rhino有一个很好的测试套件,并且没有经常看到两者之间的区别,但是当然,我们可能需要修复一些bug。
当你说“我不需要生成额外的类文件”时,这是什么意思?当您在非解释模式下运行Rhino时,它确实会生成字节码,然后执行它,但是除非您显式地这样做,否则它不会生成或保存“类文件”--但是它运行得更快。
最后,1.7R4是几个旧版本,许多bug已经修复。我鼓励你尝试一下最近的版本:
https://stackoverflow.com/questions/33240358
复制相似问题