Поскольку приложения 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 имеет более продолжительное время автономной работы, чем мой (удивительный) нексус.
В любом случае, спасибо за ответы ниже.