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 はトレースのコンパイル中に空きレジスタを使い果たしたはずであり、スピルを試行するのではなく、トレースを破棄しました (場合によっては、トレースを 2 つの小さなチャンクに分割して再試行します)。

この状況は 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 に答える