我看到Android“篡改”Java字节码的正当理由是性能(我怀疑还有其他原因)。然而,通过更改字节码,他们是否使Jazelle等硬件加速技术无效,从而实际上降低了移动Java平台的可用性能?
对于一个基于ARM的移动平台来说,这似乎与常识相悖。虽然在其他CPU架构上可能会提供更好的性能,但似乎它对ARM和Jazelle不利。
它对Java性能有什么数量级的影响?
它是否真的能提高性能,如果可以,如何提高?
它对其他平台的影响是什么?(例如x86、mips等...)
我看到Android“篡改”Java字节码的正当理由是性能(我怀疑还有其他原因)。然而,通过更改字节码,他们是否使Jazelle等硬件加速技术无效,从而实际上降低了移动Java平台的可用性能?
对于一个基于ARM的移动平台来说,这似乎与常识相悖。虽然在其他CPU架构上可能会提供更好的性能,但似乎它对ARM和Jazelle不利。
它对Java性能有什么数量级的影响?
它是否真的能提高性能,如果可以,如何提高?
它对其他平台的影响是什么?(例如x86、mips等...)
是的,Dalvik使Jazelle变得无用。唯一的问题是,Jazelle一开始是否有用,还是90%的营销炒作?一个优秀的JIT或AOT(预先编译)编译器往往比尝试使用专门的指令效果更好。 Dalvik的寄存器基础方法可能比传统的Java字节码解释器更快,但如果与JIT相比只是小幅度的区别,那么区别就不大了。希望Android的下一个版本之一有一个JIT。
编写具备最先进垃圾回收器和优化器的良好虚拟机需要大约5-10年时间。Sun(和微软)花费了这些年的时间。 Google没有。希望他们会继续投资,以便有一天,Android Java代码不会比它应该慢90%。
与大多数虚拟机和真正的Java虚拟机(JVM)不同,Dalvik VM是一种基于寄存器的架构。
Dalvik针对低内存要求进行了优化,具有一些特定的特征,使其与其他标准VM有所区别:
- VM被精简以使用更少的空间。
- Dalvik没有即时编译器。
- 常量池已被修改为仅使用32位索引以简化解释器。
- 它使用自己的字节码,而不是Java字节码。
此外,Dalvik被设计为设备可以有效地运行多个VM实例。
编辑: 请参阅维基百科:开放手持设备联盟。创始成员包括英特尔、摩托罗拉、高通和德州仪器。ARM于2008年12月加入。因此,当目标是创建开源iPhone/Blackberry竞争对手时,这些公司依赖于一个非成员的专有技术就没有意义了。