Ponieważ aplikacje dla systemu Android działają na maszynie JVM (Dalvik VM), która jest w zasadzie procesorem wirtualnym, a każda instrukcja wirtualna musi być odwzorowana na instrukcję natywną bazowego mikroukładu, czy to mapowanie powoduje większe zużycie energii z powodu narzutu związanego z mapowaniem?
To pytanie można rozszerzyć na Javę, a także sformułować jako „czy aplikacje Java zużywają więcej mocy?”. Czy dlatego telefony z Androidem mają tak przerażającą żywotność baterii w porównaniu do innych platform / telefonów?
Edycja : Na podstawie odpowiedzi wyjaśniłem kilka punktów, ponieważ błędnie mówiłem o JVM i Dalvik zamiennie. W tym fragmencie mówię o Javie tylko po to, by zapytać, czy zużywa ona więcej energii, a jeśli tak, to czy koncepcyjnie dotyczy to również Androida i czy powoduje skrócenie żywotności baterii.
Kontekst : cytowany z Wikipedii:
- Kod bajtowy Java jest analogiczny do języka asemblera dla kodu C.
- Z punktu widzenia kompilatora wirtualna maszyna Java jest tylko kolejnym procesorem z zestawem instrukcji, kodem bajtowym Java, dla którego można wygenerować kod.
- JVM ma architekturę stosową. Dalvik to procesowa maszyna wirtualna, która nie jest tego samego typu wirtualizacją co JVM i ma architekturę rejestru.
Ponieważ język programowania Java jest kompilowany do kodu bajtowego (podobny do zestawu) i działa na procesorze wirtualnym, zapewnia on prawdziwą przenośność kodu oprogramowania. Ponadto, ponieważ istnieje JVM dla systemu Linux, a Linux został przeniesiony na otwarty sprzęt, kombinacja może zapewnić prawdziwą przenośność aplikacji na całym stosie.
Moc : pytanie zasadniczo sprowadza się do tego - w przypadku tego samego zestawu funkcji kodu oprogramowania lub aplikacji, jaki procent cykli zegara procesora jest przypisany do środowiska wykonawczego. Dzieje się tak w środowisku kompilacji Just-In-Time współczesnych maszyn JVM, w którym jeśli kod bajtowy jest kompilowany do natywnej instrukcji bazowego mikroukładu, wówczas czas wykonywania powinien być aktywny tylko podczas kompilacji jit. Więc o ile więcej cykli zegara procesora zużywa się w środowisku wykonawczym, które zgodnie z oczekiwaniami spowoduje zużycie energii. Interesuje mnie tylko aspekt zużycia energii, a nie względna wydajność w porównaniu ze statycznie typowanymi i wbudowanymi językami i rozumiem zalety Javy. Pod-pytania, które mogą być powiązane:
- Czy środowisko wykonawcze Java korzysta z biblioteki libc ze względu na swoją funkcjonalność?
- Czy któryś z tych punktów związanych z zużyciem energii przekłada się na Dalvik VM i Androida?
- Zamiast uogólniać słabe zużycie baterii Androida bez mówienia o ekranie i mikroukładach bezprzewodowych - porozmawiajmy o tym, jak iPhone 5 ma baterię 1440 mAH, która jest niewielka w porównaniu do nowoczesnych telefonów Nexus. Cały ten tok myślenia (Java, procesor wirtualny, mapowanie instrukcji, Android) powstał, ponieważ przyjaciel lojalisty z iPhone'a twierdził, że może to być prawdopodobny powód, dla którego jego iPhone ma lepszą żywotność baterii niż mój (niesamowity) nexus.
W każdym razie dziękuję za odpowiedzi poniżej.