当前位置:首页 > 虚拟机 > 正文

听说安卓是java虚拟机


一、为什么说安卓是虚拟机

因为自由开源的操作系统是基于Linux的。

Android的系统结构和操作系统一样,采用分层架构。从架构图来看,Android从高到低分为四层,分别是应用程序层、应用程序框架层、系统运行时层和Linux内核层。开发人员还可以完全访问核心应用程序使用的API框架。

Android运行在Linux内核上,但不是GNU/Linux。因为GNU/Linux中支持的大部分功能Android都不支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango和Glibc等,都被删除了。

扩展信息:

虚拟机的系统特征:

1.虚拟化技术包括对操作系统中的内存进行虚拟化,用户实际运行时所需的内存量可以远大于物理机的内存大小。利用内存虚拟化技术,用户可以将部分硬盘虚拟成内存。

2.虚拟机是虚拟机技术的核心。它是位于操作系统和计算机硬件之间的一层代码,用于将硬件平台划分为多个虚拟机。

在特权模式下运行。其主要功能是隔离和管理上层运行的多个虚拟机,仲裁它们对底层硬件的访问,并为每个客户操作系统虚拟一个虚拟机。独立于硬件的虚拟硬件环境(包括处理器、内存、I/O设备)。

参考来源:百度-Android百科


二、关于android和x86的几点疑问。android基因linux内核,系统除了内核还有其他什么Android除了基于Linux内核之外,还有更高层的运行环境、相关函数库、命令编程等。
其实android是一个基于Linux内核的JAVA虚拟机环境。
Android程序实际上是运行在JAVA虚拟机上的解释性语言程序。
但是解释语言程序的性能肯定不如原生二进制程序。所以Android也有NDK程序。
意思是Android中有一些本地二进制程序内容。这样,本地程序操作可以达到最大效率,并且可以根据CPU功能(例如霓虹灯)进行优化。
脚本不同,但是他的JAVA虚拟机是解释型语言,基于JAVA语言的程序可以运行,没有任何区别。只要能够保证Android上的JAVA虚拟机能够在x86上成功运行即可。
但是Android还有一个问题,就是JAVA虚拟机针对ARM性能进行了优化。在x86上,此性能优化功能不再可用,需要在x86上重新优化。不过听说Android的JAVA虚拟机语言也针对ARM硬件进行了修改设计,所以这类针对ARM性能优化的JAVA程序在X86系统上也会出现性能下降的情况。
Android发布后很长一段时间,在x86上的性能并不是很好。
现在有NDK程序、ARM二进制文件无法在x86上运行。这些程序都无法运行。
但是x86的优点是性能非常强,目前的仿真技术也非常强大。在x86上,您可以使用虚拟机(qemu的用户模式值得一看)来运行ARM二进制文件。
但是,虚拟机的性能仍然下降。
因此,展望未来,Android的多CPU架构仍然是一个问题。纯JAVA程序还好说,但是使用NDK的程序却是个问题。
不过,llvm编译器提供了另一种方式,可以作为虚拟机运行,也可以编译成本地程序并转换为二进制程序来优化性能。也许Android会考虑使用这种方法或类似的方法来允许在CPU上部署NDK程序。代价是Android必须自带一个体积不小的编译器。
MACOSX有不同的方法。MAC放弃IBM的PowerCPU并改用Intel的CPU后,其程序带有两套二进制文件。旧的G4CPU机器在程序中使用了源指令集的程序代码。新的IntelCPU机器自动使用内部x86指令来运行程序。从而实现了完美的双指令集操作。然而,付出的代价是这样的程序包含两个指令集的内容,其大小增加了一倍。
目前,使用NDK的程序似乎无法使用。不排除现在有些x86手机使用虚拟机技术来运行NDK程序。现在,Linux中qemu的usermode配合内核的binfmt_misc函数,可以让系统自动识别某种架构的程序,并调用qemu来执行它们。
三、安卓和Linux是什么关系安卓能运行Linux软件?为什么说安卓是虚拟机环境?虚拟机有什么特点优?Android最初使用的是Linux系统内核。Linux操作系统的内核,穿上外壳,加上一些应用软件就是操作系统。Linux系统是用C语言编写的,已被广泛移植到各种机器上。
虚拟机是具有虚拟CPU和指令集的虚拟计算机硬件系统。在运行时,虚拟指令被翻译成物理机器指令来执行。JAVA语言运行在虚拟机上。使用虚拟机的优点是二进制代码可以在任何物理机上运行,​​真正跨平台;缺点是翻译和执行效率相对较低。
Linux系统可以安装在任何电脑或手机上,移植也比较简单。但应用软件有限。


四、安卓严格意义是不是运行在虚拟机的系统又是废话了Android系统底层是用C写的,你不得不说Android应用程序运行在类似于JVM的虚拟机上。