深度解读Android应用程序性能

移动开发 Android
Google于2007年底正式发布了Android SDK,作为谷歌手机新出的Android应用程序,Dalvik虚拟机也第一次进入了人们的视野。

苹果公司推出的IPHONE以来,谷歌也不逊色也随机推出他们自己手机的操作系统,Android应用程序是基于Linux内核的软件平台和操作系统,希望本文能够给大家多多帮助。

和在低速CPU上表现出的高性能,确实令人刮目相看。依赖于底层Posix兼容的操作系统,它可以简单的完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。

很多人认为Dalvik虚拟机是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言。但是这种说法并不准确,因为Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容;同时还要两个明显的不同:

◆Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable)。 
◆在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件,而后Java虚拟机会从相应的CLASS文件和JAR文件中获取相应的字节码;
Android应用程序虽然也是使用Java语言进行编程,但是在编译成CLASS文件后,还会通过一个工具(dx)将应用所有的CLASS文件转换成一个DEX文件,而后Dalvik虚拟机会从其中读取指令和数据。

Android运行库包括两部分:核心库和Dalvik虚拟机。核心库包括了最基本的类库,如data structure, network, Utilities, File system等的,很多实现代码都是来自Apache Harmony项目。主要目的是保证虚拟机的类库能够和Java SE的类库***可能的兼容,从而降低应用开发者从Java SE阵营转移到Android开发阵营的难度,增加其可用性。

Dalvik虚拟机主要是完成对象生命周期的管理,堆栈的管理,线程管理,安全和异常的管理,以及垃圾回收等等重要功能。 Dalvik虚拟机的主要特征Dalvik 虚拟机非常适合在移动终端上使用,相对于在桌面系统和服务器系统运行的虚拟机而言,它不需要很快的CPU速度和大量的内存空间。

根据Google的测算,64M的RAM已经能够令系统正常运转了。其中24M被用于底层系统的初始化和启动,另外20M被用于高层启动高层服务。当然,随着系统服务的增多和应用功能的扩展,其所消耗的内存也势必越来越大。 归纳起来,Dalvik虚拟机有如下几个主要特征:

◆调整所有字段的字节序(LITTLE_ENDIAN)和对齐结构中的没一个域 
◆验证DEX文件中的所有类 
◆对一些特定的类进行优化,对方法里的操作码进行优化

每一个Android应用程序都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖底层操作系统而实现的。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制。

不同的应用在不同的进程空间里运行,加之对不同来源的应用都使用不同的Linux用户来运行,可以***程度的保护应用的安全和独立运行。 
Zygote是一个虚拟机进程。

同时也是一个虚拟机实例的孵化器,每当系统要求执行一个 Android应用程序,Zygote就会FORK出一个子进程来执行该应用程序。这样做的好处显而易见:Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化。

库的加载,预置类库的加载和初始化等等操作,而在系统需要一个新的虚拟机实例时,Zygote通过复制自身,最快速的提供个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,大大节省了内存开销。

【编辑推荐】

  1. Android应用程序组建原理深入剖析 
  2. Android SMS短信服务相关概念简述 
  3. PythonAndroid数据库相关代码解读 
  4. PythonAndroid安装卸载程序具体操作方法解析 
  5. Android应用程序的四个关键点 
责任编辑:chenqingxiang 来源: 51CTO.com
相关推荐

2009-07-01 18:24:59

JSP应用程序JMeter

2019-10-17 10:10:23

优化Web前端

2011-08-08 13:35:50

Web应用WANWeb应用程序

2010-11-15 16:20:33

Oracle系统优化

2014-12-16 09:35:13

DevOps

2011-09-20 10:41:45

Web

2011-01-19 11:10:50

程序交付优化应用程序性能管理监控

2022-07-04 17:32:12

DevOpsAIOps

2020-12-03 08:00:00

SQL数据库MySQL

2009-01-08 19:14:37

服务器应用程序SQL Server

2012-11-28 11:09:28

IBMdW

2010-07-28 09:25:41

jQueryJavaScript性

2009-01-08 19:06:13

服务器应用程序SQL Server

2009-01-08 19:11:39

服务器应用程序SQL Server

2009-07-29 11:33:14

ASP.NET技巧ASP.NET应用程序

2015-05-07 09:05:18

2018-11-06 09:53:27

2017-06-13 17:23:53

存储缓存数据

2011-07-07 09:03:12

ASP.NET

2010-01-25 10:57:57

Android系统应用
点赞
收藏

51CTO技术栈公众号