为何安卓机广泛卡,广泛慢? 能够先参考一下这篇文章。 而我认为这篇文章疏忽了一点,那就是安卓的应用层和虚拟机。 首先咱们来看看安卓系统的架构图 它的最底层是linux内核,而它的应用层倒是要用java来作,而java的特性就是跨平台,“一次编译,到处运行”,java跨平台的原理
。 看到了吗?它跨平台的缘由是由于它内置了一个“虚拟机”!!!它先用一个“编译器”把JAVA代码编译成“字节码”,而后虚拟机再负责把这些字节码解释,翻译给CPU听,这就至关于你全部的软件都是跑在一台虚拟的电脑上的!而在性能比手机更强劲的PC上,你跑一个虚拟机看看资源的占用,hehe。 这就是为何安卓手机广泛卡慢的另外一个重要缘由。 咱们再来看看ios/mac os x的架构
虽然是mac os x,但也和ios八九不离十。 mac os x(如下简称x)系统的架构的最底层则是unix系的freebsd做为内核,另和mach内核混合(mach兼容posix标准,而freebsd则是unix另外一支正朔,因此称x为unix-like并没有不妥)的darwin内核
而x的应用层实现倒是用c/objective-c/swift纯编译性语言实现,效率天然高出很多。 话又说回来了,为何一样能够跨平台,为何安卓不用c作应用层???而是选择了java???要知道C也是一样能够跨平台的啊! C的跨平台方式是“一次编写,到处编译。”而java刚才说过是“一次编译,到处运行”。C语言的编译方式是“C语言代码先通过预处理,而后编译成汇编语言,而后再从汇编编译成二进制文件,而后再由二进制文件连接生成可执行文件”。那么问题来了,安卓操做系统是面向嵌入式设备的,不光是给手机,还要给机顶盒,平板,上网本,电视机,飞行器,路由器网关,智能家居balabala一大堆设备用,这么多设备,即使都是arm,也未必是同一个公司的芯片,这么多硬件平台,若是用C语言作APP,那就真得跟x同样分为“iphone版”和“ipad版”,并且你觉得这就完了?不!一样的程序从手机编译移植到ipad,能不能用还不必定!还得去从新测试,去维护......这都是人力啊,这都是物力啊,这都是财力啊!而安卓的“一次编译,到处运行”的方式,编译生成的.apk包我能够同时给平板和智能手机用!而大多数状况不会出错(避免了依赖硬件,由于运行在虚拟机上)!这样给公司节省了多少人力物力? 反观ios平台,ipad版上废弃了很多工程,很多公司为了兼顾ipad和iphone不得不两头跑,甚至开启两个项目组分头维护,更多公司更是“只有iphone,没有ipad”也是让人无语到不行,可是要作跨平台就要浪费更多的人力物力。然而硬件依赖方面,作ios系统的厂商目前只有apple一家,全部的设备包括ipad,iphone,iwatch,机顶盒硬件标准都是统一的,这个问题就没有安卓那么严重,安卓光手机一块就有多少厂家在作?每家硬件平台都不同,若是拿C实现应用层,最后又要跟unix世界同样打的分崩离析,相同的程序在这家安卓机上没问题在另外一家就出问题,再找一家压根跑不起来。。。。 2333333.。。。。html