深度解读Android应用程序性能 |
|
本文标签:Android应用程序 苹果公司推出的IPHONE以来,谷歌也不逊色也随机推出他们自己手机的操作系统,Android应用程序是基于Linux内核的软件平台和操作系统,希望本文能够给大家多多帮助 。 和在低速CPU上表现出的高性能,确实令人刮目相看 。依赖于底层Posix兼容的操作系统,它可以简单的完成进程隔离和线程管理 。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行 。 很多人认为Dalvik虚拟机是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言 。但是这种说法并不准确,因为Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容;同时还要两个明显的不同: ◆Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable) 。 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)和对齐结构中的没一个域 每一个Android应用程序都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间 。虚拟机的线程机制,内存分配和管理,Mutex等等都是依赖底层操作系统而实现的 。所有Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制 。 不同的应用在不同的进程空间里运行,加之对不同来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用的安全和独立运行 。 同时也是一个虚拟机实例的孵化器,每当系统要求执行一个 Android应用程序,Zygote就会FORK出一个子进程来执行该应用程序 。这样做的好处显而易见:Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化 。 库的加载,预置类库的加载和初始化等等操作,而在系统需要一个新的虚拟机实例时,Zygote通过复制自身,最快速的提供个系统 。另外,对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域,大大节省了内存开销 。 |