57 votes

Que ne pouvez-vous pas faire sur la VM Dalvik (la VM d'Android) que vous pouvez faire sur la VM Sun ?

Je sais que vous pouvez exécuter presque tout Java en VM de Dalvik que vous pouvez dans La VM de Java mais les limites ne sont pas très claires. Quelqu'un a-t-il rencontré des obstacles majeurs ? Des bibliothèques importantes ont-elles des difficultés ? Y a-t-il des langages qui compilent en code d'octet Java ( Scala , Jython etc...) ne fonctionnent pas comme prévu ?

35voto

Marcin Points 3884

Il y a un certain nombre de choses que Dalvik ne traitera pas ou pas tout à fait de la même manière que le bytecode Java standard, bien que la plupart d'entre elles soient assez avancées.

El L'exemple le plus grave est la génération de bytecode au moment de l'exécution. et le chargement de classes personnalisées. Imaginons que vous souhaitiez créer un bytecode et utiliser ensuite le classloader pour le charger à votre place. Si cette astuce fonctionne sur votre machine normale, il est garanti qu'elle ne fonctionnera pas sur Dalvik, à moins que vous ne changiez votre génération de bytecode.

Cela vous empêche d'utiliser certains cadres d'injection de dépendances, l'exemple le plus connu étant Google Guice (bien que je sois sûr que certaines personnes y travaillent). D'un autre côté, AspectJ devrait fonctionner car il utilise l'instrumentation du bytecode comme étape de compilation (mais je ne sais pas si quelqu'un a essayé).

Quant aux autres langages jvm, tout ce qui se compile en bytecode standard et n'utilise pas d'instrumentation de bytecode à l'exécution peut être converti en Dalvik et devrait fonctionner. Je sais que des personnes ont fait tourner Jython sur Android et que cela a bien fonctionné.

Une autre chose à savoir est qu'il y a pas de compilation juste à temps . Ce n'est pas strictement le problème de Dalvik (vous pouvez toujours compiler n'importe quel bytecode à la volée si vous le souhaitez) mais le fait qu'Android ne le supporte pas et qu'il est peu probable qu'il le fasse. En effet, alors que le microbenchmarking pour Java standard était inutile - les composants avaient des caractéristiques d'exécution différentes dans les tests et en tant que parties de systèmes plus grands - les microbenchmarks pour les téléphones Android ont totalement un sens.

6 votes

Quelques mises à jour : Il y a une version spéciale de Guice qui fonctionne sur Android. code.google.com/p/google-guice/downloads/ Google a une équipe qui travaille sur un JIT pour Android. groups.google.com/group/Android-platform/browse_thread/thread/

10 votes

Depuis Android Froyo, il supporte le compilateur JIT à granularité de trace.

2 votes

Google Guice fonctionne bien. Consultez le site roboguice.org pour savoir comment utiliser guice sur Android.

12voto

Wonil Points 1499

Si vous voyez " Internes de la machine virtuelle Dalvik " Session Google IO, vous pouvez trouver Dalvik ne supporte pas GC générationnel .

Ainsi, cela pourrait dégrader les performances de la création et de la suppression fréquentes d'objets. Java VM supporte la GC générationnelle, ce qui permet d'obtenir de meilleures performances de GC dans la même situation.

Et aussi, Dalvik utilise trace-granualité JIT au lieu de la méthode de granularité JIT.

2voto

Wilfred Springer Points 5430

Une autre chose qui pourrait être ajoutée ici est que Dalvik ne préserve apparemment pas l'ordre des champs lorsqu'il énumère les champs d'une classe en utilisant l'API de réflexion. De toute façon, l'API de réflexion n'offre aucune garantie à ce sujet (donc, idéalement, vous ne devriez pas en dépendre), mais la plupart des autres VMs existantes faire préserver l'ordre.

-1voto

Sean Walsh Points 1

Je voulais juste ajouter quelque chose à la conversation, mais je n'avais pas l'intention de relancer un vieux fil. Je viens de tomber sur ce sujet lors de mes recherches, et je tiens à ajouter que Jython ne fonctionne pas non plus avec Dalvik. En essayant simplement de faire un exemple de type "hello world", on obtient le résultat suivant :

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