当我在手机上启动应用程序时,我从日志中收到以下错误:
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
发生了什么事?
答案 0 :(得分:7)
Dalvik JIT使用简单的& amp;快速注册分配器,一般不知道如何溢出。在这种情况下,JIT必须在编译跟踪时耗尽空闲寄存器而不是尝试溢出,它放弃了跟踪(在某些情况下,它会将跟踪分成两个较小的块并重试)。
这种情况更可能发生在Armv5te系统上,因为JIT使用16位Thumb指令(限制了有用寄存器的集合)。但是,预计它不会是一个常见的问题(它只会导致性能下降 - 它不应该是正确性问题)。如果您经常看到这种情况,请提交错误报告。
谢谢,
... Bill Buzbee
答案 1 :(得分:1)
看起来没有什么可担心的。从android问题跟踪器: http://code.google.com/p/android/issues/detail?id=18647
“这种情况绝不应该发生在实际设备上> armv5te,并且无论如何都代表错过的性能机会而不是正确性问题。我会将LOGE更改为LOGD。”
“消息的目的是帮助JIT开发人员确定特定代码模式是否经常发生,以证明额外的优化工作是合理的。”
“如果它偶尔发生在较旧的设备(或模拟器)上,那么可以忽略它。但是,如果你经常看到它表明存在问题 - 可能是错误配置的Dalvik VM构建或者新代码已被添加系统使那曾经不常见的情况变得普遍。“