Rhino 中的优化级别

Optimization Level in Rhino

我的项目使用 Rhino 1.7R4。 通过将 Rhino 的优化级别从 0 设置为 -1(因为我不需要生成额外的 class 文件),我得到了意想不到的结果。

在 Rhino 代码中,在 Codegen class 下,根据优化级别集进行一些额外处理。

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 level > 0,它会进行一些额外的字节码优化。 但是我正在将用例中的优化级别从 0 更改为 -1,以便使用 Rhino 的解释器模式

所以我的问题是,当优化级别从 0 更改为 -1 时,rhino 对字节码做了哪些更改?

提前致谢。

此文档仍然是关于 Rhino 中各种优化级别的最新内容:

https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Optimization

实际上,当您将优化级别设置为 -1 时,您会将 Rhino 切换到解释模式,这意味着它执行代码的路径与在编译模式下不同。当然,解释模式比编译模式慢得多。我们在 Rhino 中有一个不错的测试套件,并没有经常看到两者之间的差异,但当然可能存在我们需要修复的错误。

你说 "i don't need extra class files to be generated" 是什么意思?当你 运行 Rhino 处于非解释模式时,它确实会生成字节码然后执行它,但它不会生成或保存 "class files" 除非你明确地这样做 - 但它 运行 更快。

最后,1.7R4 是几个旧版本,许多错误已得到修复。我鼓励您尝试更新的版本:

https://github.com/mozilla/rhino