5

当我在手机上启动我的应用程序时,我从日志中收到很多以下错误:

E/dalvikvm( 2052): No free temp registers
E/dalvikvm( 2052): Jit: aborting trace compilation, reverting to interpreter
E/dalvikvm( 2052): No free temp registers
E/dalvikvm( 2052): Jit: aborting trace compilation, reverting to interpreter

发生了什么 ?

4

2 回答 2

7

Dalvik JIT 使用简单快速的寄存器分配器,通常不知道如何溢出。在这种情况下,JIT 在编译跟踪时必须用完空闲寄存器,而不是尝试溢出,它放弃了跟踪(在某些情况下,它将跟踪分成两个较小的块并重试)。

这种情况更可能发生在 Armv5te 系统上,因为 JIT 使用 16 位 Thumb 指令(这限制了有用寄存器的集合)。但是,预计这不会是一个常见问题(它只会导致性能降低 - 这不应该是正确性问题)。如果您经常看到这种情况发生,请提交错误报告。

谢谢,

...比尔·布兹比

于 2011-02-09T01:17:34.143 回答
1

看起来没什么好担心的。来自 android 问题跟踪器: http ://code.google.com/p/android/issues/detail?id=18647

“这种情况绝不应该发生在实际设备 > armv5te 上,无论如何都代表错失了性能机会,而不是正确性问题。我会将 LOGE 更改为 LOGD。”

“该消息的目的是帮助 JIT 开发人员确定特定代码模式的出现频率是否足以证明额外的优化工作是合理的。”

“如果它偶尔在旧设备(或模拟器)上发生,那么忽略它是安全的。但是,如果你经常看到它表明存在问题 - 可能是配置错误的 Dalvik VM 构建或可能已将新代码添加到系统中这使得曾经不常见的情况变得普遍。”

于 2012-01-05T02:06:18.670 回答