Android 애플리케이션은 기본적으로 가상 프로세서 인 JVM (Dalvik VM)에서 실행되며 모든 가상 명령어는 기본 칩셋의 기본 명령어에 매핑되어야하므로이 매핑으로 인해이 매핑의 오버 헤드로 인해 더 많은 전력을 소비합니까?
이 질문은 Java로 확장 될 수 있으며 "Java 응용 프로그램이 더 많은 전력을 사용합니까?"로 표현 될 수 있습니다. 이것이 안드로이드 전화가 다른 플랫폼 / 전화와 비교하여 무서운 배터리 수명을 갖는 이유입니까?
편집 : 대답을 바탕으로 JVM과 Dalvik에 대해 잘못 이야기했기 때문에 몇 가지 사항을 분명히했습니다. 이 비트에서는 Java에 대해 더 많은 전력을 사용하는지 묻고 예인 경우 개념적으로 Android에도 적용되며 배터리 수명이 줄어 듭니다.
문맥 : Wikipedia에서 인용하는 :
- Java 바이트 코드는 C 코드의 어셈블리 언어와 유사합니다.
- 컴파일러의 관점에서 볼 때 Java 가상 머신은 코드를 생성 할 수있는 명령어 세트 인 Java 바이트 코드를 가진 또 다른 프로세서 일뿐입니다.
- JVM에는 스택 아키텍처가 있습니다. Dalvik은 JVM과 동일한 유형의 가상화가 아니며 프로세스 아키텍처를 갖는 프로세스 가상 머신입니다.
Java 프로그래밍 언어는 바이트 코드 (조립식)로 컴파일되고 가상 프로세서에서 실행되므로 진정한 소프트웨어 코드 이식성을 제공합니다. 또한 Linux 용 JVM이 있고 Linux가 개방형 하드웨어로 이식되었으므로이 조합은 전체 스택에서 진정한 애플리케이션 이식성을 제공 할 수 있습니다.
전원 : 문제는 본질적으로 소프트웨어 코드 또는 응용 프로그램의 동일한 기능 집합에 대해 런타임 환경에 따른 CPU 클록 사이클의 백분율을 결정합니다. 이것은 최신 JVM의 JIT (Just-In-Time) 컴파일 환경에서 바이트 코드가 기본 칩셋의 기본 명령어로 컴파일 된 경우 런타임은 jit 컴파일 중에 만 활성화되어야합니다. 따라서 런타임 환경에서 CPU 소비 사이클이 얼마나 많이 소비되어 전력 소비 오버 헤드가 발생할 것으로 예상됩니다. 나는 전력 소비 측면에만 관심이 있으며 정적으로 유형이 지정되고 작성된 언어와 비교하여 상대적인 성능이 아니라 Java의 장점을 이해합니다. 관련 될 수있는 하위 질문 :
- Java 런타임은 기능에 libc를 사용합니까?
- 이러한 전력 소비 관련 포인트가 Dalvik VM 및 Android로 해석됩니까?
- 화면 및 무선 칩셋에 대해 이야기하지 않고 Android의 배터리 소모를 일반화하는 대신 iPhone 5에 1440mAH 배터리가 장착되어 최신 Nexus 휴대 전화와 비교하여 작은 크기에 대해 이야기 할 수 있습니다. iphone-loyalist 친구가 이것이 나의 (멋진) 넥서스보다 그의 배터리 수명이 더 좋은 이유 일 수 있다고 주장했기 때문에이 전체 사고 (Java, Virtual processor, instruction mapping, Android)가 일어났습니다.
어쨌든 아래 답변에 감사드립니다.