Como os aplicativos Android são executados em uma JVM (Dalvik VM), que é basicamente um processador virtual, e todas as instruções virtuais precisam ser mapeadas para as instruções nativas do chipset subjacente, esse mapeamento resulta em mais consumo de energia devido à sobrecarga desse mapeamento?
Esta questão pode ser estendida para Java e também formulada como "os aplicativos Java usam mais energia?". É por isso que os telefones Android têm uma duração de bateria tão assustadora em comparação com outras plataformas / telefones?
Edit : Com base nas respostas, esclareço alguns pontos, porque eu tinha falado erroneamente da JVM e Dalvik de forma intercambiável. Neste passo, estou falando sobre Java apenas para perguntar se ele consome mais energia e, se sim, isso também se aplica conceitualmente ao Android e resulta em menor duração da bateria.
Contexto : citado na Wikipedia:
- O bytecode Java é análogo à linguagem assembly para código C.
- Do ponto de vista de um compilador, a máquina virtual Java é apenas outro processador com um conjunto de instruções, Java bytecode, para o qual o código pode ser gerado.
- A JVM possui uma arquitetura de pilha. Dalvik é uma máquina virtual de processo que não é o mesmo tipo de virtualização da JVM e possui uma arquitetura de registro.
Como a linguagem de programação Java é compilada no bytecode (semelhante a um assembly) e é executada em um processador virtual, fornece verdadeira portabilidade de código de software. Além disso, como há uma JVM para Linux e o Linux foi portado para hardware aberto, a combinação pode fornecer verdadeira portabilidade de aplicativo em toda a pilha.
Potência : A questão se resume a isso - para o mesmo conjunto de funcionalidades do código ou aplicativo de software, qual a porcentagem de ciclos de clock da CPU atribuída ao ambiente de tempo de execução. Isso ocorre no ambiente de compilação Just-In-Time das JVMs modernas, onde se o bytecode for compilado com a instrução nativa do chipset subjacente, o tempo de execução deverá estar ativo apenas durante a compilação jit. Portanto, quanto mais ciclos de clock da CPU são usados para ter o ambiente de tempo de execução que deve resultar em uma sobrecarga de consumo de energia. Estou interessado apenas no aspecto do consumo de energia, e não no desempenho relativo comparado com as linguagens estaticamente tipadas e construídas e entendo as vantagens do Java. Sub-perguntas que podem estar relacionadas:
- O Java Run time usa a libc para sua funcionalidade?
- Algum desses pontos relacionados ao consumo de energia se traduz na VM e no Android Dalvik?
- Em vez de generalizar o baixo consumo de bateria do Android sem falar sobre a tela e os chipsets sem fio - vamos falar sobre como o iPhone 5 tem uma bateria de 1440 mAH, que é pequena se comparada aos telefones Nexus modernos. Toda essa linha de pensamento (Java, processador virtual, mapeamento de instruções, Android) surgiu porque um amigo fiel do iPhone alegou que esse poderia ser o motivo provável para o iPhone ter uma vida útil melhor da bateria do que o meu (impressionante) nexo.
De qualquer forma, obrigado pelas respostas abaixo.