PKM*_*PKM 14 java power android jvm virtual-machine
由于Android应用程序运行在基本上是虚拟处理器的JVM(Dalvik VM)上,并且每个虚拟指令都必须映射到底层芯片组的本机指令,因此这种映射是否会由于这种映射的开销而导致更多的功耗?
这个问题可以扩展到 Java,也可以表述为“Java 应用程序是否使用更多功能?”。这就是 Android 手机与其他平台/手机相比电池寿命如此惊人的原因吗?
编辑:根据答案,我澄清了几点,因为我错误地将 JVM 和 Dalvik 互换使用。在这一点上,我谈论 Java 只是为了询问它是否使用更多功率,如果是,那么这在概念上是否也适用于 Android 并且是否会导致电池寿命缩短。
上下文:引自维基百科:
由于 Java 编程语言被编译为字节码(类似汇编)并在虚拟处理器上运行,因此它提供了真正的软件代码可移植性。此外,由于有一个适用于 Linux 的 JVM,并且 Linux 已被移植到开放硬件上,因此这种组合可以在整个堆栈中提供真正的应用程序可移植性。
功率:问题基本上归结为这一点 - 对于软件代码或应用程序的相同功能集,您的 CPU 时钟周期的百分比归因于运行时环境。这是现代 JVM 的即时编译环境,如果字节码被编译为底层芯片组的本机指令,那么运行时应该只在 jit 编译期间处于活动状态。那么在运行时环境中使用了多少 CPU 时钟周期,这预计会导致功耗开销。我只对功耗方面感兴趣,而不是与静态类型和构建语言相比的相对性能,并了解 Java 的优势。可能相关的子问题:
无论如何,感谢您的回答。
all*_*tic 25
你的问题是基于许多有缺陷的假设。让我尝试清除它们:
您说的是“JVM(Dalvik VM)”。这就像在说“飞机(自行车)”。这两件事完全没有关系。
你说“......这基本上是一个虚拟处理器”。简直是假的。这是不是说,每个词“虚拟机”或缩写“VM”在技术方面被使用时,它实质上等同于案件的VMware Workstation。这是因为像 VMware这样的产品实际上模拟了整个计算机,而不仅仅是 CPU,而且是在另一个操作系统之上运行一个操作系统。Dalvik VM不是这样工作的。差远了。
Java 只是一种编程语言。这是语法。Android/Dalvik 程序碰巧使用与完全不相关的桌面/服务器编程语言 Java 相同或非常相似的语法,Java 运行在 Java 虚拟机上。理论上,您可以编写与 C 代码速度非常接近的 Java 代码,因为它们都是高级编程语言。问题在于库调用的实现细节和运行时的设计方式,这与语言的语法关系不大。
如果说 Dalvik VM、Sun Java Hotspot JVM 或 Java 编程语言语法是导致高功耗的原因,则过于笼统。其原因是,你有比较无论你是在谈论到的性能别的东西。在最一般的情况下,当您只是比较两个平台的“最佳情况”功能时,原则上可以使 Dalvik 应用程序与任何其他平台上的程序一样快或更快。除了自动内存管理和 JIT 编译——这些功能在当今几乎所有的编程环境中都是标准的,包括在 iOS 和 JavaScript/HTML5 上——几乎没有将 Dalvik 与 Objective-C、.NET、Ruby、 Oracle 热点 JVM、Python 等。
“Java 很慢”的看法是由于旧版本的 Java 存在问题,因为它们要么没有即时编译器 (JIT),要么它们拥有的 JIT 在功能上非常有限。JVM 有一个即时编译器很长一段时间以来。JIT 编译器是运行时(例如,JVM)的一部分,它采用独立于处理器的字节码——例如 Java 字节码——并将其编译为 CPU 的本机指令。这个过程在 Java 程序启动时完成,高级 JIT 编译器可以在运行时优化单个函数或指令,以根据观察到的结果提高它们的性能。例如,如果一个方法每次被调用时都返回真,但从原始字节码中并不明显它会这样做,JIT 编译器可以识别它只是返回真,并用一个硬 - “真”的编码值。这只是一个例子。
JIT 编译和运行时动态代码分析技术近年来取得了巨大进步。许多计算机科学界认为,在十年或二十年,在动态解释/编译语言,比如Java,C#和Ruby提供了精密的分析,将如此先进的是,在大多数情况下,这些语言会执行速度更快,在运行时比静态编译的语言,如 C 和 C++。这是因为静态编译器通常仅限于在构建时编译代码,并且不会在运行时修改代码。但是在程序代码可以自行重写的运行时环境中在执行期间,为了更高效地执行,通过分析代码的性能并进行调整以降低代码的复杂性或在 CPU 上运行的指令数量,可以实现巨大的优势。对于频繁调用的代码,执行分析所需的时间投资远远超过重复调用更快代码的性能优势。
需要注意的是,Android Dalvik VM 也包含一个 JIT,并且它不使用与 Sun/Oracle JVM 相同的字节码格式。Dalvik 的 JIT 针对低内存环境进行了优化,并且在运行时性能增强方面非常先进。因此,JVM 和 Dalvik为各自基于 Java 的运行时环境实现了类似的优化,这有点巧合,但在幕后,它们却大不相同。
不要忘记 Dalvik 本身;Linux内核;低级系统进程;并且 Android 网络浏览器(Firefox 和 Chrome)的核心是用原生 C/C++ 编写的,因此它们没有 Dalvik 程序会出现的任何开销问题。这与iOS相同。如果您谈论的是纯 Android而不是位于其之上的运营商/第三方膨胀,那么构成核心 Android 的很大一部分不是使用 Dalvik 编写的。
Android 上的应用程序开发人员也可以选择编写本机代码,绕过 Dalvik。如果应用程序开发人员认为 Dalvik 是他们代码性能的瓶颈,或者导致其消耗过多电池,他们可以选择简单地编写 C/C++ 甚至汇编代码,而无需获得 Google 的批准这样做,并像这样分发他们的应用程序。
以下是Android 电池供电设备或任何设备可能出现电池寿命问题的一些实际原因:
保持 CPU、屏幕或数据连接唤醒的应用程序。特别是 LTE 等 4G 芯片组在开机时会消耗大量能量,因此如果您有后台程序不断唤醒 LTE 芯片以传输几千字节的数据,那将很快耗尽您的电池电量。现代智能手机和平板电脑的屏幕也非常耗能,除非您将亮度调到最低。
“Bloatware”需要在设备上,并且无法卸载。一些不道德的运营商要求您运行占用 CPU 周期并保持数据连接唤醒的膨胀软件。这可能是由于英国媒体报道软件开发人员的无能,或者是有意监控您在智能手机上的活动并将其发送到远程服务器进行数据挖掘,这对您的电池来说非常耗能。
最后,我不同意您关于 Android 的电池寿命问题比其他移动平台更严重的评估。某些手机和设备可能确实存在电池寿命问题,原因可能是电池容量相对于硬件的能耗;优化不佳的电源设置(由用户、运营商或制造商选择);或者让手机中的芯片一直处于唤醒状态的膨胀软件应用程序。但是对于每个出现电池问题的设备示例,我都可以举出一个具有出色电池寿命的设备的反例。没有简单的方法可以概括“它是 Dalvik”或“它是 Linux”或“它是 Java”。电源优化是一个复杂的硬件/软件混杂的竞争问题,包括性能、响应能力、以及用户对电池寿命的期望,每种选择都有利有弊。要完全了解设备的电源配置文件,您必须仔细查看电池本身、所有硬件以及设备上运行的所有软件。
在这个答案中,我将比较 Android 和 IOS 的性能,因为两者占据了 80% 以上的市场份额。
Java 应用程序不使用更多功能。( http://www.javarants.com/2004/05/04/looks-like-apple-should-switch/ ) Oracle 的 Java VM 或实际上 Google 的 Dalvik VM 被认为比 IOS 的 Objective-C 高效得多。Java 能够在代码在手机上执行之前对其进行优化,这可能会带来更好的性能。Java 库是开源的,因此已经由数百名不同的开发人员进行了优化。另一方面,对于 IOS,只有 Apple 开发人员才能更改代码。更少的审查 = 更少的潜在绩效。
Android 程序也能够运行本地 C 代码,这可能比 Object-C(IOS 上唯一支持的语言)更快。
Google 决定使用 Dalvik VM 的原因是为了可移植性。我知道 Android 可以正式运行的四种不同的 CPU 架构(ARM、MIPS、x86、I.MX)。而其他所有手机操作系统只能使用一个 (ARM)。( http://en.wikipedia.org/wiki/Comparison_of_mobile_operating_systems ) 因此将不同的 CPU 类型与例如 iPhone 进行比较是不公平的。如果 Android 运行在 iPhone 上,Android 将具有可比拟的卓越性能和电池寿命。
“Java 应用程序是否使用更多功能?” 根本没有。
与其他平台/手机相比,为什么 Android 手机的电池寿命如此惊人?
很多安卓手机的造价比苹果的iPhone便宜,但看看价格差异。iPhone 的成本更高,因为它内置了更大的电池(而且它的平均 CPU 速度较慢)。我的安卓手机(谷歌 Galaxy Nexus)的电池寿命与 iPhone 4G 相当,但硬件规格要快得多(1GHz 对 1.2GHZ)。
编辑:Java 可以在不需要程序员知识的情况下优化代码。完美,C 代码总是比 Java/Objective-C/C# 运行得更快;也就是说,有多少程序员是完美的?在 JVM 层面,Java 和库会因为它的开源开发原则而“更加完美”。( http://www.infoq.com/news/2012/03/Defects-Open-Source-Commercial )
编辑 2:小信息:联想的新 P780 Android 手机 - 42 小时通话 vs 12 小时 iPhone。