我对android系统的看法
2013/11/23 23:36:00 人气 520 休闲灌水论坛这里我发表一点关于我对android系统的看法,本质上讲android就是linux的谷歌版本,在linux运行谷歌公司开发的Dalvik虚拟机(个人觉得就和斯凯的mrp虚拟机类似),该虚拟机允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行。在使用过程中,每一个linux会为安卓程序开启一个独立的虚拟机,读取应用程序中的dex字节码来运行。dalvik进程管理是依赖于linux的进程体系结构的,如要为应用程序创建一个进程,它会使用linux的fork机制来复制一个进程(复制进程往往比创建进程效率更高)。类似于java,dalvik是Android程序的虚拟机。
为什么相同配置的android系统的手机会没有ios和塞班运行流畅呢?很多人将它归结于两个系统的显示机制的问题,其实不然。一是因为android系统其实是运行dalvik虚拟机的linux系统,android的硬件利用率没有ios高,ios作为封闭式操作系统,对硬件利用率是非常高的,如网上有种说法我比较赞同,就是android是硬件兼容系统,而ios和塞班是系统兼容硬件,既ios和塞班是为特定的硬件设计特定的系统,而android是只要硬件达标就可以使用。这中间就有个硬件利用率的问题,android硬件利用率是比较低的。二是因为android虚拟机的自动回收机制,大家都知道,在android2.3之前的机子用起来都是卡卡的,这就是因为android得自动回收机制产生的,android虚拟机在运行程序的时候会随时检查内存,当检测到没有使用的资源的时候,虚拟机将会停止程序清理内存,清理完成后才会继续运行,这个时间是人类可以察觉到的几十毫秒,所以程序会出现卡顿。而2.3之后,谷歌对虚拟机进行了优化,在androidapi里添加了NDK,NDK是android的一个跨越,它使得开发人员可以通过NDK来调用c语言运行库.os文件,它的出现使得android开发人员可以通过c语言优化内存(java语言是无法访问内存的),而不必等待虚拟机的自动回收机制来回收。使用NDK的时候,C语言编写的代码将直接运行在Linux底层,脱离了虚拟机在运行,开发人员调试起来不方便,如果内存控制不当的话可能产生很多不良后果,但是它的效率更高,所以很多大型游戏需要使用NDK来开发。
为什么相同配置的android系统的手机会没有ios和塞班运行流畅呢?很多人将它归结于两个系统的显示机制的问题,其实不然。一是因为android系统其实是运行dalvik虚拟机的linux系统,android的硬件利用率没有ios高,ios作为封闭式操作系统,对硬件利用率是非常高的,如网上有种说法我比较赞同,就是android是硬件兼容系统,而ios和塞班是系统兼容硬件,既ios和塞班是为特定的硬件设计特定的系统,而android是只要硬件达标就可以使用。这中间就有个硬件利用率的问题,android硬件利用率是比较低的。二是因为android虚拟机的自动回收机制,大家都知道,在android2.3之前的机子用起来都是卡卡的,这就是因为android得自动回收机制产生的,android虚拟机在运行程序的时候会随时检查内存,当检测到没有使用的资源的时候,虚拟机将会停止程序清理内存,清理完成后才会继续运行,这个时间是人类可以察觉到的几十毫秒,所以程序会出现卡顿。而2.3之后,谷歌对虚拟机进行了优化,在androidapi里添加了NDK,NDK是android的一个跨越,它使得开发人员可以通过NDK来调用c语言运行库.os文件,它的出现使得android开发人员可以通过c语言优化内存(java语言是无法访问内存的),而不必等待虚拟机的自动回收机制来回收。使用NDK的时候,C语言编写的代码将直接运行在Linux底层,脱离了虚拟机在运行,开发人员调试起来不方便,如果内存控制不当的话可能产生很多不良后果,但是它的效率更高,所以很多大型游戏需要使用NDK来开发。
发表回复