Étant donné que les applications Android s'exécutent sur une machine virtuelle Java (machine virtuelle Dalvik) qui est essentiellement un processeur virtuel, et que chaque instruction virtuelle doit être mappée à l'instruction native du chipset sous-jacent, ce mappage entraîne-t-il une consommation d'énergie accrue en raison de la surcharge de ce mappage?
Cette question peut être étendue à Java et être également formulée comme "les applications Java utilisent-elles plus de puissance?". Est-ce la raison pour laquelle les téléphones Android ont une durée de vie de la batterie aussi épouvantable que d'autres plateformes / téléphones?
Edit : Sur la base des réponses, j'ai clarifié quelques points parce que j'avais parlé à tort de JVM et Dalvik de manière interchangeable. Dans cette partie, je parle de Java uniquement pour demander s'il utilise plus d'énergie et si oui, cela s'applique-t-il conceptuellement à Android et entraîne-t-il une diminution de la durée de vie de la batterie.
Contexte : cité sur Wikipedia:
- Le bytecode Java est analogue au langage d'assemblage pour le code C.
- Du point de vue d'un compilateur, la machine virtuelle Java n'est qu'un autre processeur avec un jeu d'instructions, Java bytecode, pour lequel du code peut être généré.
- JVM a une architecture de pile. Dalvik est une machine virtuelle de processus qui n'est pas le même type de virtualisation que JVM et possède une architecture de registre.
Étant donné que le langage de programmation Java est compilé en bytecode (de type assembleur) et qu'il s'exécute sur un processeur virtuel, il offre une véritable portabilité du code logiciel. De plus, comme il existe une JVM pour Linux et que Linux a été porté sur du matériel ouvert, la combinaison peut fournir une véritable portabilité des applications sur toute la pile.
Puissance : La question se résume essentiellement à ceci - pour le même ensemble de fonctionnalités de votre code logiciel ou de votre application, quel pourcentage de vos cycles d'horloge CPU est attribué à l'environnement d'exécution. C'est le cas avec l'environnement de compilation Just-In-Time des machines virtuelles Java modernes où si le bytecode est compilé en fonction de l'instruction native du chipset sous-jacent, l'exécution ne devrait être active que pendant la compilation jit. Alors, combien de cycles d'horloge CPU supplémentaires sont utilisés pour avoir l'environnement d'exécution qui devrait entraîner une surcharge de consommation d'énergie. Je ne m'intéresse qu'à l'aspect consommation d'énergie, et non aux performances relatives par rapport aux langages typés et construits statiquement et je comprends les avantages de Java. Sous-questions pouvant être liées:
- Le temps d'exécution Java utilise-t-il la libc pour ses fonctionnalités?
- Certains de ces points liés à la consommation d'énergie se traduisent-ils par la machine virtuelle Dalvik et Android?
- Au lieu de généraliser la faible consommation de batterie d'Android sans parler de l'écran et des chipsets sans fil - parlons de la façon dont l'iPhone 5 possède une batterie de 1440 mAH, ce qui est minuscule par rapport aux téléphones Nexus modernes. Cet ensemble de pensées (Java, processeur virtuel, mappage d'instructions, Android) est né parce qu'un ami fidèle à l'iPhone a affirmé que cela pourrait être la raison probable pour que son iPhone ait une meilleure autonomie de batterie que mon (génial) Nexus.
Dans tous les cas, merci pour les réponses ci-dessous.