看到这里,肯定有人会问,为什么Google选择了执行效率更高的Java而不是C?如果谷歌用C作为Android开发语言,Android早就死了。EMUI9.1发布的时候,华为就已经开始做脱离安卓虚拟机的事情了。如果真如余承东所说,新系统不仅能接入手机和电脑的智能设备,还能完美支持所有安卓应用和Web程序,那应该是深度使用了于方舟编译器这样的技术,摆脱了安卓虚拟机。

为什么安卓不放弃虚拟机机制,转变更高效的方式,例如ios一样?

那不就是Linux手机?很多厂商做过,不了了之。安卓要不是傍上JAVA,也不会有如今的局面。JAVA开发者比C/C 多太多了。WP就死在这上面。IOS要不是有硬件支撑,也早死了。安卓起初的时候是要做一套跨平台的移动系统,事实上以前也出现过X86和MIPS的手机,只不过后来被ARM一统天下,才会让人觉得这个JVM是个累赘。

为什么Android不可以绕开虚拟机直接运行?

当初设计android的时候,设计人员只是软件工程师,无法针对某个CPU(目前有的CPU框架intel,arm,mips,rsicv等)去开发。最好的是,我针对所有CPU都支持。于是,安卓发现了java,java设计理念是啥?跨平台,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。怎么实现一次编译,多平台(cpu)运行因为机器针对不同机器语言,有不同执行逻辑。

就好比二进制000100,在arm里面是调用加法器,而riscv是调用乘法器一样。所以,需要给这些不同平台请个翻译。而虚拟机就是起到翻译作用。这样虽然增加了消耗(例如执行同样代码,时间消耗上,c明显由于java),但是可以某种意义上,把软件,物理硬件分开了。软件重点设计自己app,而硬件不断增加CPU性能。

华为新系统兼容安卓,是不是意味着底层还是安卓呢?

其实,安卓就是基于Linux内核的操作系统,它和Linux是有很大区别的,安卓是在Linux内核的基础上添加了自由特性的驱动程序,而后自成一派,就是我们使用的安卓系统。而华为新系统兼容安卓,并不依赖安卓的底层,它所依赖的也只是Linux内核。而Linux是免费的谁都可以用,但对于企业是要授权的。所以,根据余承东所说的,新系统可以完美兼容安卓等特性,应该还是Linux内核,严格来说,华为系统应该也不能完全算是国产。

但是,新系统是可以和安卓区别开来,不受它的制约。其实在EMUI9.1发布时候,华为已经开始做脱离安卓虚拟机的事情了。这就是华为推出的黑科技方舟编译器。安卓应用运行在虚拟机上,采用的是边解释,边运行的方式,所以应用程序在运行时会存在效率低的问题,而方舟编译器的做法是,直接将编译放到了开发端,开发者只需在程序开发完成后,将代码编译为机器语言然后打包,用户安装后即可直接运行。

省去了在虚拟机上编译解释的步骤,从而提升的运行效率。很多人担心新系统上软件生态的问题,我们可以结合方舟编译器和最近余承东所说的内容来一起看。方舟编译器发布时候曾提示软件开发商尽快使用,从而提升性能。对于软件开发商也许并不需要再开发一套新的软件,只需要将原有的安卓程序重新编译,就可以在方舟编译器上运行。

而这个黑科技相信在华为的新系统中同样存在,如果真是这样,那么事情就简单了很多。从最近的诸多消息来看,华为的新系统应该是和安卓一样,都是基于Linux内核开发的独立系统。如果真像余承东所说的那样,新系统既可以打通手机电脑智能设备,又可以完美支持所有安卓应用和Web程序的话,那应该就是类似于方舟编译器这样的科技被深度运用,从而摆脱安卓虚拟机来实现的。

方舟编译器是将java代码像C 静态编译,那么为什么安卓当时一开始为啥不用C ?

华为的方舟编译器可以编译C/C,Java,JavaScript,Kotlin。方舟编译器可以说是实现了几乎所有操作系统平台的通用开发语言的编译环境。但需要强调的是,Ark编译器并没有像C/C那样实现Java的静态编译,本质上Ark编译器还是基于GCC的交叉编译套件,它本身采用的是预编译的方式。至于效率,目前只有华为官方给出了一些数据,我也在华为开发者官网搜索过这个工具。


文章TAG:安卓为什么一定要java虚拟机  安卓  java  底层  虚拟  意味着  
下一篇