Poiché le applicazioni Android vengono eseguite su una JVM (Dalvik VM) che è fondamentalmente un processore virtuale e ogni istruzione virtuale deve essere mappata sull'istruzione nativa del chipset sottostante, questa mappatura comporta un maggiore consumo di energia a causa del sovraccarico di questa mappatura?
Questa domanda può essere estesa a Java e può anche essere definita come "le applicazioni Java usano più potenza?". È per questo che i telefoni Android hanno una durata della batteria così spaventosa rispetto ad altre piattaforme / telefoni?
Modifica : in base alle risposte che ho chiarito alcuni punti perché avevo erroneamente parlato di JVM e Dalvik in modo intercambiabile. In questo momento sto parlando di Java solo per chiedere se utilizza più energia e, in caso affermativo, si applica concettualmente anche ad Android e si traduce in una durata della batteria ridotta.
Contesto : citato da Wikipedia:
- Il bytecode Java è analogo al linguaggio assembly per il codice C.
- Dal punto di vista di un compilatore, la macchina virtuale Java è solo un altro processore con un set di istruzioni, bytecode Java, per il quale è possibile generare il codice.
- JVM ha un'architettura stack. Dalvik è una macchina virtuale di processo che non è lo stesso tipo di virtualizzazione di JVM e ha un'architettura di registro.
Poiché il linguaggio di programmazione Java viene compilato in bytecode (simile ad un assembly) e viene eseguito su un processore virtuale, garantisce la portabilità del vero codice del software. Inoltre, poiché esiste una JVM per Linux e Linux è stato portato su hardware aperto, la combinazione può fornire una vera portabilità dell'applicazione su tutto lo stack.
Potenza : La domanda si riduce essenzialmente a questo - per lo stesso insieme di funzionalità del codice software o applicazione, quale percentuale dei vostri cicli di clock della CPU sono attribuiti all'ambiente fase di esecuzione. Questo è con l'ambiente di compilazione Just-In-Time delle moderne JVM in cui se il bytecode viene compilato secondo l'istruzione nativa del chipset sottostante, il runtime dovrebbe essere attivo solo durante la compilazione jit. Quindi, quanti più cicli di clock della CPU vengono consumati nell'ambiente di runtime che dovrebbe comportare un sovraccarico di consumo energetico. Sono interessato solo all'aspetto del consumo di energia, e non alle prestazioni relative rispetto ai linguaggi tipizzati e costruiti staticamente e capisco i vantaggi di Java. Sotto-domande che potrebbero essere correlate:
- Java Run time utilizza libc per la sua funzionalità?
- Qualcuno di questi punti relativi al consumo di energia si traducono in VM Dalvik e Android?
- Invece di generalizzare lo scarso consumo della batteria di Android senza parlare dello schermo e dei chipset wireless, parliamo di come l'iPhone 5 abbia una batteria da 1440 mAH che è minuscola rispetto ai moderni telefoni Nexus. L'intero gruppo di pensieri (Java, processore virtuale, mappatura delle istruzioni, Android) è nato perché un amico lealista di iPhone ha affermato che questo potrebbe essere il motivo probabile per il suo iPhone con una durata della batteria migliore rispetto al mio (fantastico) nesso.
In ogni caso, grazie per le risposte di seguito.