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 是几个旧版本,许多错误已得到修复。我鼓励您尝试更新的版本:
我的项目使用 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 是几个旧版本,许多错误已得到修复。我鼓励您尝试更新的版本: