41 votes

Est-ce que le runtime Android ART a les mêmes limites de méthodes que Dalvik?

Est-ce que le runtime Android ART a les mêmes limites de méthodes que Dalvik? Actuellement, il y a une limite de 64k méthodes dans le fichier dex primaire

73voto

fadden Points 17450

Le problème n'est pas avec le Dalvik d'exécution, ni le DEX format de fichier, mais avec le jeu actuel de Dalvik instructions. Plus précisément, les différentes méthode d'invocation de méthodes, qui ressemble à ceci:

invoke-kind {vC, vD, vE, vF, vG}, meth@BBBB

B: method reference index (16 bits)

Vous pouvez faire référence à un très grand nombre de méthodes dans une DEX de fichier, mais vous ne pouvez invoquer le premier 65536, parce que c'est tout l'espace dont vous disposez dans l'invocation de la méthode d'instruction.

Je tiens à souligner que la limitation est le nombre de méthodes référencées, pas le nombre de méthodes définies. Si votre fichier DEX a seulement quelques méthodes, mais ensemble, ils appellent 70 000 définis à l'externe méthodes, vous allez dépasser la limite.

Une façon de résoudre ce problème est d'ajouter des instructions complémentaires qui prennent plus large de la méthode de référence. Une approche appelée "jumbo " opcodes" a été mis en œuvre et publié dans l'Android 4.0 (ICS), mais n'a jamais été pleinement mis en action, et plus tard a été retiré de l'arbre. (Il m'arrive de voir des posts ici avec des messages d'erreur à partir de "dx" qui référence jumbo ops, ou de développeurs qui a trébuché sur eux.)

Remarque ce n'est pas le problème résolu par l' Facebook hack. C'est grâce à un fixe la taille de la mémoire tampon pour la tenue de classe/méthode/champ de méta-données. Il n'y a pas de méthode spécifique à la limite, il ya, vous pouvez faire sortir le tampon en ayant beaucoup de champs.

Ma compréhension est que la mise en œuvre actuelle de l'ART gère le même ensemble d'instructions qui Dalvik n', de sorte que la situation ne sera pas différente.

5voto

Alex Lipov Points 990

Anwar Ghuloum a déclaré dans cet épisode de Backstage des développeurs Android qu'ils ne vont pas corriger le code intermédiaire dans un avenir proche.
À la place, à partir d’Android L, ils prendront en charge multi-dex de manière native en regroupant tous les fichiers de dex (d’un APK) dans un seul fichier d’avoine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X