为什么安卓不用虚拟机
㈠ 为什么Android不可以绕开虚拟机直接运行
安卓是谷歌将它从开源linux上改造而来,依旧保持开源特性。为了应用开发者更多地开发安卓程序,自然也就保留了linux上的虚拟机机制。同时,安卓的目标是手机等移动终端,这些设备的处理器五花百门,而且开源安卓也会被各种深入定制,这同样导致了安卓依然沿用了虚拟机机制来保持高兼容性。当然,这些华为研发了方舟编译器,让系统直接运行机器码,以此来消除虚拟机带来的弊端。
安卓系统最早并不是谷歌研发出来的,而是一家名叫Android的初创公司研发的。这家公司成立22个月后,就把原始Android雏形系统以4千万美元的价格卖给了谷歌。 这个雏形原本就基于linux系统研发而来,自然里面也还是沿用了linux的虚拟机机制。
谷歌拿到系统后,自己继续研发Android系统,在2007年还集合了84家当时一流的硬件厂商组成研发联盟。整个研发依然还是基于linux开源系统,但它解决了商业化的一个大难题。那就是,linux是开源系统,是有GPL开源协议的。很多硬件厂家为了适配该系统,必须将在上面研发的驱动程序公开,一旦公开驱动程序代码就相当于公开了自己的硬件设计。而谷歌研发的Android系统解决了这个问题,它将驱动程序放置到了userspace里面,并让它可以通过l内核访问硬件。同时,公开接口就可以让硬件厂商编写驱动程序。硬件厂商只需要提供驱动程序即可,不需要公开源代码了。
这么多硬件厂商一起研发,自然就会 面临一个问题就是每个厂商的硬件都不同。这对Android生态发展来说是个必须解决的兼容性问题。最好的办法依然是沿用linux的虚拟机机制 ,这样Android的软件作者就无需针对不同硬件重新开发软件。只需要一次开发就可以在安卓系统上的虚拟机中运行。
安卓的虚拟机机制在很大程度上解决了兼容性的问题,但是这种边解释边执行的方式,也降低了软件的运行效率。这些年,华为在这方面的研发上花了大功夫,成功研制出了“方舟”编译器。该编译器就是为了解决这个问题而诞生的。如果软件作者采用方舟编译器重新编译自己的程序。它的软件就可以以机器码的形式在安卓系统上高效运行,并且方舟编译器还会对程序进行优化。按照华为方面的数据显示, 使用华为方舟编译器编译后的程序,操作流畅度提升24%,系统响应速度提升44%,第三方应用操作流畅度提升60%!
Android没有绕开虚拟机直接运行,是因为从它研发之初为了保持高兼容性,不得不沿用了虚拟机的机制。但在这些年,华为研发了“方舟”编译器,就是为了解决这个问题。通过方舟编译器编译后的程序可以直接以机器码的形式在安卓系统上运行,效率大大提高。
为了多点儿面试题[机智]
当初设计android的时候,设计人员只是软件工程师,无法针对某个CPU(目前有的CPU框架intel,arm,mips,rsicv等)去开发。最好的是,我针对所有CPU都支持。
跨平台,是指java语言编写的程序,一次编译后,可以在多个系统平台上运行。
因为机器针对不同机器语言,有不同执行逻辑。
就好比二进制000100,在arm里面是调用加法器,而riscv是调用乘法器一样。所以,需要给这些不同平台请个翻译。而虚拟机就是起到翻译作用。
这样虽然增加了消耗(例如执行同样代码,时间消耗上,c明显由于java),但是可以某种意义上,把软件,物理硬件分开了。软件重点设计自己app,而硬件不断增加CPU性能。
因为上层应用是 建立在 java 库的基础上,运行 java 库 需要 java 虚拟机,调试模式,可以登录到系统里,直接运行linux 命令,也可以下载运行 c程序。
啥叫Android不可以绕开虚拟机直接运行?Android本质上是Linux的变种,它本身就是应用APP的虚拟机容器,Android源码针对硬件平台编译之后,就是直接在CPU上运行的机器码了,它的运行并不依赖于其他的虚拟机。
APP是JAVA打包的,倒是需要在Android的JVM里运行,毕竟要考虑跨平台嘛。
ActivityThread.java就是一个应用程序,有main方法,是一个进程,就是靠虚拟机,没有这个就没有app。咋绕开,绕开就得不用这个,得从内部更换成别的,都更换了那就不是简单的事情了
因为java代码必须编译成机器语言才行,这时候就要接助虚拟机
在问为什么前,先问下是什么?Android是可以不依赖虚拟机运行的,只需要改一下重新编译就好了。
系统就是这么设计的
㈡ 解释为什么Android系统运行的java程序不使用标准的java API和虚拟机
主要受到版权、成本和生态这些方面才使用的java程序。
android的内核是linux,用java包装一层会有效率上的损失。但是java的用户基数庞大,在当时拉开了c用户5个点之多。
此外,当时市场上有强大的iphone已经抢先建立了apple store,应用数量超android很多,如果用了java就有可能在程序员数量上超过ios程序员。从而建立自己的生态系统。
㈢ 为什么电脑上可以有安卓模拟器,安卓上没有windows模拟器。
因素有很多,最主要的因素就是CPU架构问题
电脑采用的是x86架构的CPU,x86架构主要运行Windows、Linux和UNIX等桌面端操作系统,同时也支持安卓系统,但部分安卓应用运行在x86架构的CPU上很不兼容,会造成闪退等现象,这也说明了为什么用模拟器比真正的手机体验差很远的问题
而手机采用的是ARM架构的CPU,是全面兼容安卓系统的,但却不对Windows这些桌面端系统支持,别说运行Windows应用兼容性差了,连Windows系统都装不上
说白了,就是电脑CPU支持安卓系统,而手机CPU不支持Windows系统
虽然网上有BOCHS等在手机上运行Windows的虚拟机,但劝你不要去尝试,因为这类虚拟机是在ARM架构的基础上调用命令集去模拟x86架构的,不仅会对硬件造成影响,而且体验也很卡,开机没个10分钟就别想进入桌面,而且就算是打开“我的电脑”至少也需要30秒钟才反应过来
至于什么时候才能在手机上安装Windows系统,还要等微软开发兼容ARM处理器的Windows系统,或者等手机开发商开发x86架构的手机
还有一个因素,就是用途不广,没人去开发
电脑装安卓模拟器大多数是为了用电脑玩手机游戏,这样屏幕大体验比较好,或是在没有手机只有电脑的情况下需要用到手机程序之类的
而手机装Windows模拟器的话,屏幕又小,操作又不方便,而且能用安卓系统就能解决的事为什么还要去用Windows系统呢?用Windows系统的话还不如直接用电脑,或者是云电脑远程控制这一类的,谁会花大功夫去做没必要的事呀
以上内容纯属原创,如果能帮助到你的话,望采纳~
㈣ 安卓,为何宁肯使用效率低的虚拟机也不使用效率更高的沙盒
我们都知道。安卓系统和iOS系统是两个完全不同的系统。他们的运行机制也有很大的区别。苹果的iOS系统运行机制为沙盒。而安卓系统的运行机制为虚拟机。而虚拟机的大小一般都要比沙盒系统大很多。
今天小编就说到这里,欢迎大家在评论区给我留言哦。