Différence entre dexopt et dex2oat?

Google se déplace de DalvikART (Android Runtime).

j'essayais de comprendre comment cela allait améliorer la performance.

La meilleure explication que j'ai trouvé, c'est l'image ci-dessous:

Dalvik and ART

un des principaux composants qui a changé est dexoptdex2oat.

Puisque je n'ai pas beaucoup d'idée à ce sujet, quelqu'un peut-il expliquer la différence et comment cela va améliorer la la performance?

33
demandé sur JonasCz 2014-10-08 14:21:23

1 réponses

dexopt fait quelques optimisations sur le fichier dex. Il fait des choses comme remplacer une instruction d'invocation virtuelle par une version optimisée qui inclut l'index vtable de la méthode appelée, de sorte qu'il n'a pas à effectuer une recherche de méthode pendant l'exécution.

le résultat de dexopt est un fichier odex (optimisé dex). Ceci est très similaire au fichier original dex, sauf qu'il utilise certains opcodes optimisés, comme le virtuel invoke optimisé. instruction.

dex2oat prend un fichier dex et le compile. Le résultat est essentiellement un elfe de fichier qui est ensuite exécuté nativement. Ainsi, au lieu d'avoir un bytecode qui est interprété par une machine virtuelle, il a maintenant du code natif qui peut être exécuté nativement par le processeur. C'est ce qu'on appelle la compilation AOT (ahead-of-time).

les deux outils sont normalement exécutés au moment de l'installation sur l'appareil.

un Autre facteur à prendre en compte est que dalvik utilisé un compilateur JIT (just-in-time) - ce qui signifie qu'il était également capable de compiler le code bytecode en code natif. La principale différence, cependant, est que ART compile tout à l'avance, tandis que dalvik n'a compilé qu'un sous-ensemble du bytecode en utilisant l'heuristique pour détecter le code qui a été exécuté le plus souvent, et compilé pendant l'exécution.

55
répondu JesusFreke 2017-11-06 19:33:36