漫谈安卓和ios,mac os x
2016-07-04 00:00
309 查看
为什么安卓机普遍卡,普遍慢?
可以先参考一下这篇文章。
而我认为这篇文章疏忽了一点,那就是安卓的应用层和虚拟机。
首先我们来看看安卓系统的架构图
它的最底层是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.。。。。
可以先参考一下这篇文章。
而我认为这篇文章疏忽了一点,那就是安卓的应用层和虚拟机。
首先我们来看看安卓系统的架构图
它的最底层是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.。。。。
相关文章推荐
- 记录一下iOS开发中琐碎的点点_4
- iOS画板实现第二波
- iOS图层layer操作
- iOS中表单视图第三方控件——FXForms
- iOS NSURL、NSBundle获取文件,解析文件,存储文件等操作
- iOS中定位以及地图的使用
- Xamarin.iOS开发初体验
- iOS中,ARC的环境下的单例模式。
- 在iOS开发中,需要用到的多线程技术。
- 关于iOS中的手势识别
- iOS开发的22个奇葩技巧
- ios推送相关资料整理
- GCD
- iOS Foundation 基础框架
- 重定向 NSLog 输出到文件
- iOS 开发中的各种证书
- iOS 使用Charts框架 折线,柱状,K线,饼状,雷达全攻略
- 欢迎使用CSDN-markdown编辑器
- 如何进入BIOS
- runtime(三)应用 消息转发