Поскольку приложения Android работают на JVM (Dalvik VM), которая в основном является виртуальным процессором, и каждая виртуальная инструкция должна быть сопоставлена с собственной инструкцией базового набора микросхем, приводит ли это отображение к большему энергопотреблению из-за издержек этого отображения?
Этот вопрос можно распространить на Java, а также сформулировать так: «Используют ли приложения Java больше возможностей?». Вот почему телефоны Android имеют такой ужасный срок службы батареи по сравнению с другими платформами / телефонами?
Изменить: Основываясь на ответах, я разъяснил несколько моментов, потому что я ошибочно говорил о JVM и Dalvik взаимозаменяемо. В этом бите я говорю о Java только для того, чтобы спросить, использует ли она больше энергии, и если да, относится ли это концептуально и к Android, и приводит ли это к сокращению времени автономной работы.
Контекст: цитата из Википедии:
- Java-байт-код аналогичен языку ассемблера для C-кода.
- С точки зрения компилятора виртуальная машина Java - это просто еще один процессор с набором инструкций, байт-кодом Java, для которого может быть сгенерирован код.
- JVM имеет стековую архитектуру. Dalvik - это виртуальная машина процесса, которая не относится к типу виртуализации, аналогичному JVM, и имеет архитектуру регистра.
Поскольку язык программирования Java компилируется в байт-код (подобный сборке) и работает на виртуальном процессоре, он обеспечивает истинную переносимость программного кода. Кроме того, поскольку JVM для Linux и Linux были портированы на открытое оборудование, комбинация может обеспечить истинную переносимость приложения по всему стеку.
Мощность: вопрос сводится, по сути, к следующему - для того же набора функций программного кода или приложения, какой процент тактовых циклов вашего процессора относится к среде выполнения. Это происходит в среде компиляции Just-In-Time современных JVM, где, если байт-код компилируется с собственной инструкцией базового набора микросхем, тогда время выполнения должно быть активным только во время Jit-компиляции. Итак, насколько больше тактов ЦП используется в среде выполнения, которая, как ожидается, приведет к увеличению энергопотребления. Меня интересует только аспект энергопотребления, а не относительная производительность по сравнению со статически типизированными и встроенными языками, и я понимаю преимущества Java. Подвопросы, которые могут быть связаны:
- Использует ли среда выполнения Java libc для своей функциональности?
- Какие-либо из этих точек, связанных с энергопотреблением, соответствуют Dalvik VM и Android?
- Вместо того, чтобы обобщать плохое потребление батареи Android, не говоря об экране и беспроводных чипсетах, давайте поговорим о том, что у iPhone 5 есть батарея емкостью 1440 мАч, которая крошечна по сравнению с современными телефонами Nexus. Весь этот ход мыслей (Java, Виртуальный процессор, отображение инструкций, Android) возник, потому что друг-лоялист iphone утверждал, что это может быть вероятной причиной того, что его iphone имеет более длительное время автономной работы, чем мой (удивительный) нексус.
В любом случае, спасибо за ответы ниже.