个人关于鸿蒙、Java、Android跨平台的理解

鸿蒙(Harmong OS)是华为自2012年开发的一款可能兼容Android app的跨平台操作系统

1、什么是跨平台?

传统意义的跨平台既不依赖于操作系统,也不依赖硬件环境。一个操作系统下开发的应用,放到另一个操作系统依然可以运行。
像华为退出的鸿蒙OS,他可以支持到多种多样的设备,如手机、手表、智能家居、电脑、汽车等,
所以现在说的跨平台,指的是跨设备,即平台≈设备。

2、Java实现跨平台

Java体系结构中,扮演着重要角色有Java语言规范、Class文件、Java虚拟机(JVM)等。
首先,在Java语言规范中,规定了Java语言中基础数据的取值范围和行为。其次,所有Java文件都要统一的编译成Class文件。最后通过Java虚拟机将Class文件转成跨平台的二进制文件。
Java的平台无关性是简历在Java虚拟机的平台的有关性基础上的,是因为Java虚拟机屏蔽了底层操作系统和硬件的差异。
即我们要运行一段Java代码,要经过多个步骤将源代码转换成机器可以执行的机器代码,这个过辞主要是有虚拟机来完成的。

3、Android实现跨平台

Android是基于Java语言的,所以要运行一段Audroid代码也要经过多个步骤,将源代码转换成可以执行的机器代码。这个在Android的不同版本中直线不尽相同:
Android1.0:采用一个名为Dalvik的虚拟机,并且集成了一个解释器。当App运行时,就会调用这个解释器,对代码进行逐句的解释,速度很慢。
Android2.2:引入JIT(Just In Time)即时编译机制,当App运行时,会将用户经常用的功能编译成机器能直接执行的010101的机器码,不用一句一句的去翻译。当出现不常用的功能的时候,再调用解释器来翻译;这样速度加快,但每次启动App都要重新编译一次,不能一劳永逸。
Android5.0:App下载后安装到手机上同时把编译的代码先编译成机器能听懂的101010;剩下不太好翻译的代码,就在用户使用时叫醒解释器来翻译,就不用每次打开App都需要编译,但安装App的时间有点长,而且占用手机空间。
Android 7.0:采用混合编译机制,安装时先不编译中间代码,而是在用户空闲时将能够编译成机器码的那部分代码,通过AOT编译器先静态编译了。如果AOT还没来得及编译或者不能编译,再调用JIT+解释器。这种机制相当于时间换空间,缩短了用户安装App的等待时间,有将虚拟机里编译器和解释器能做的优化提升到最大效率了。

3、鸿蒙实现跨平台

鸿蒙OS架构中,方舟编译器和多终端开发IDE扮演着重要角色。使用华为提供的多终端IDE,多语言统一编译,使开发者可以基于同一工程高校构建多端自动运行App,实现真正的一次开发,多端部署,在跨设备之间实现共享生态。
有了IDE,开发者可以方便的开发一套代码,这样可以自动部署到各种设备中。
华为方舟编译器是首个取代Audroid虚拟机模式的静态编译器,可供开发者在开发环境中一次性将高级语言编译成机器码。此外,方舟编译器未来将支持多语言统一编译,可大幅度提高开发效率。
Android之所以”慢”,是因为编译是在终端上进行的,即在用户的手机上通过虚拟机进行编译成可执行的机器码。
而鸿蒙OS的方舟编译器,可以将高级语言(Java)直接编印成机器码,不用虚拟机。并且这个过程在开发阶段就完成了。当用户下载App就可以 直接安装、启动和运行,无需再通过手机上的虚拟机和解释器。
华为官方介绍,方舟编译器是首家完全语言虚拟机的静态编译器,完全不需要解释器。兼顾Java开发效率和C语言运行效率的编译器。

4、除了代码编译,方舟编译器也提供了更高效的内存机制。Android的内存回收上采用集中回收机制,发生全局回收时更需要暂停应用,这就是随机卡顿的根本原因之一。而方舟编译器采用了引用计数法来进行内存的实时回收,并且配合使用专门的消除环算法(消除对象互相引用带来的无法回收问题),来避免GC集中回收带来的系统卡顿。相比GC,方舟的内存回收实时的而不是集中式的,且不需要暂停应用进程,这样便大大消除了卡顿。

方舟编译器在以后也会支持更多的开发语言,即其他语言的开发者,日后也能开发基于鸿蒙OS的应用。
原文:开源中国 https://my.oschina.net/u/4139688/blog/3092665

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐