Davilk虚拟机作为Android平台的一部分.Google公司花了大量时间思考针对低功耗手持设备的优化设计。在智能手机出现之前,与桌面设备相比,手持设备在内存和速度方面落后8-10年。它们的计算能力也有限。结果,手机的性能需求变得很严格,要求手机设计人员优化所有因素。如果查看Android中的包列表,你将会看到它们的功能全面而丰富。
  这些问题使Google公司在许多方面重新审视标准JVM实现。(Dan Bomstein(一位Stanford university 的教授)对Google公司的这个JVM实现作出了重要贡献,他编写了Dalvik VM,Dalvik是冰岛一个小镇的名称。)首先.Dalvik VM获取生成的Java类文件,将它们组合为一个或多个Dalvik可执行文件(.dex)。它重用多个类文件中的重复信息,与未压缩的传统.jar文件相比,有效地将空间需求减少了一半。如图所示:

  其次,Google公司在Dalvik VM中对垃圾收集进行了调优,但它在早期版本中选择了删除java经典的JIT(Just-In-Time,即时)编译器。后来,Android 2.3添加了JIT.报告称这可在各种场所提供快2到5倍的原始性能,将通用应用程序的性能提升l0%-20%.android 4.4以后引入的art虚拟机,这是一种新的机制,以后有时间在说。
  最后,Dalvik VM使用了一种不同的汇编代码生成方法,它使用寄存器而不是栈作为主要的数据存储单元。GOogle公司希望这样能将指令减少到30%。应当指出,采用Dalvik VM的一个结果是,Android中最终的可执行程序代码不是基于Java字节码,而是基于.dex文件。这意味着无法直接执行Java字节码,必须首先得到Java类文件,然后将它们转换为可链接的.dex文件。如图所示:

  这种对性能的狂热追求还扩展到了Android SDK的其他部分。例如:

  Android SDK大量使用XML来定义相应布局。然而,所有XML数据必须编译为二进制文件,然后才能将这些文件存储在设备上。Android提供了一些专门的机制来处理XML数据。

   当然,android由于虚拟机的限制,有了相应的性能瓶颈,因此在android 4.4时候引入art虚拟机。下节,我们聊一聊art虚拟机。

最新文章

  1. 进击的Python【第二十一章】
  2. 关于一个通俗易懂的FFT的C语言实现教程
  3. java中的动态代理
  4. CodeForces 688D-Remainders Game
  5. WPF实现渐变淡入淡出的动画效果
  6. Android ListView实现仿iPhone实现左滑删除按钮
  7. 2015 UESTC Winter Training #10【Northeastern Europe 2009】
  8. Oracle SQL Lesson (1) - 使用SQL Select语句获取数据
  9. android listview 使用
  10. SSH深度历险(九) Struts2+DWZ+Uploadify实现多文件(文件和图片等等)上传
  11. 初识Java NIO
  12. 增长中的时间序列存储(Scaling Time Series Data Storage) - Part I
  13. 学习Axure RP原型设计
  14. Fiddler 你需要了解的
  15. JS之鼠标改变img
  16. 【多线程】死锁与Java栈跟踪工具
  17. 解决最新版 mac os sierra usb网卡不能使用的问题
  18. android手机常用分辨率
  19. GitFlow在命令行的使用
  20. 算法训练 Cowboys(DP)

热门文章

  1. NOI.AC NOIP模拟赛 第五场 游记
  2. KVM基于X86硬件辅助的虚拟化技术实现机制【转】
  3. 【转载】CMenu自绘---钩子---去除边框
  4. @Transactional导致AbstractRoutingDataSource动态数据源无法切换的解决办法
  5. [原创]浅谈移动App安全测试
  6. code.google.com/p/log4go 下载失败
  7. 利用Android Lost通过互联网或短信远程控制安卓设备
  8. [Winform]缓存处理
  9. iOS7中的多任务 - Background Fetch,Silent Remote Notifications,Background Transfer Service
  10. PPT幻灯片放映不显示备注,只让备注显示在自己屏幕上-投影机 设置