精华内容
下载资源
问答
  • 虚拟机和容器的区别

    2019-11-12 14:47:36
    虚拟机和容器的区别 虚拟机 虚拟机技术 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以...

    虚拟机和容器的区别

    物理机、虚拟机和容器的区别

    物理机
    在这里插入图片描述
    虚拟机
    在这里插入图片描述
    容器
    在这里插入图片描述

    虚拟机

    (一)虚拟机技术

    虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

    虚拟化是表示计算机资源的逻辑组(或子集)的过程,这样就可以用从原始配置中获益的方式访问它们。这种资源的新虚拟视图并不受实现、地理位置或底层资源的物理配置的限制。

    虚拟化技术可针对具体应用目的创建特定目的的虚拟环境,安全、效率高,快照、克隆、备份、迁移等方便。系统虚拟化是将一台物理计算机虚拟成一台或多台虚拟计算机系统,每个都有自己的虚拟硬件,其上的操作系统任认为自己运行在一台独立的主机上,计算机软件在一个虚拟的平台上而不是真实的硬件平台上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。其中CPU的虚拟化可以单CPU模拟多CPU并行运行,允许一个平台同时运行多个操作系统,并且应用程序可以在相互独立的空间内运行而互不影响。虚拟化技术在降低硬件成本的同时,还可以显著提高系统的工作效率和安全性。

    虚拟化系统的实现通常是在操作系统和硬件之间加入一个虚拟机监控程序,称为Hypervisor(如图所示)。由Hypervisor主要负责各个操作系统之间的硬件资源协调。虚拟机监控程序是一种特殊操作系统,直接在裸机上运行(针对完全虚拟化技术)。虚拟机监控程序创建一个底层硬件平台抽象,一个或多个虚拟机(VM)共享这个底层硬件平台。在这种环境中,VM只是操作系统及其应用程序的容器,一个 VM 与虚拟机监控程序上运行的其他 VMs 隔离,这支持多个操作系统或多个配置不同的相似操作系统。

    在这里插入图片描述
    1.虚拟计算机系统三层含义-同质、高效、资源受控。
    同质-本质上虚拟机和物理机是相同的、表现上有所差异,如一个物理核虚拟多个核。
    高效-虚拟机效能接近物理机。
    资源受控-虚拟机对系统资源有完全的控制能力,包括分配、管理、回收。

    2.虚拟化分不同层面的虚拟化
    硬件抽象层的虚拟化-客户机与宿主机硬件相似,指令集相似。
    操作系统层虚拟化-内核可以提供多个相互隔离的用户态,其拥有独立的文件系统、网络、系统设置和库函数。
    库函数层初始化-是不同的操作系统可以拥有共同的库函数接口,应用程序不需修改。

    编程语言层虚拟化-编的程序运行在一个虚拟机上,与具体硬件无关。如Java。

    3.虚拟机的优点
    良好的封装-虚拟机的运行环境保持便捷,便于随时抓取状态、备份、克隆、挂起和恢复。
    多实例-最大限度减少物理资源,提高利用率,便于管理。
    隔离-每个应用程序可以再独立的操作系统中运行,互不干涉,崩溃也不会影响其他任务。
    硬件无关性-只要拥有相同的硬件抽象层,虚拟机就可以无缝迁移,因此维护和升级简单。
    安全-便于控制访问权利,病毒入侵检测等。

    4.虚拟化分类
    按照虚拟化程度分完全虚拟化和类虚拟化。完全虚拟化-客户及操作系统不需要任何修改即可运行,分软件辅助完全虚拟化和硬件辅助完全虚拟化,完全虚拟化能够模拟所有CPU指令。
    类虚拟化-操作系统需要做出适应性修改,回避那些难以模拟的指令。

    按照宿主机是否存在独立操作系统分为hypervisor模型和宿主模型,前者需支持所有的物理资源管理(系统启动、内存管理、设备驱动等),效率高、复杂;后者只需调用宿主操作系统API实现虚拟化,宿主操作系统可以是windows、linux,效率低、简单。第三类是两者的混和,VMM位于硬件层之上,但让出部分IO设备管理权给一个运行在特权虚拟机上的特权操作系统,VMM负责处理器和内存虚拟化。

    (二)虚拟化技术框架

    虚拟环境组成:硬件、VMM、虚拟机,物理机中操作系统直接管理硬件(通过硬件抽象层HAL),虚拟环境中VMM管理硬件(会构建一个或多个逻辑HAL),操作系统运行在VMM 逻辑HAL之上,运行在非CPU最高特权。

    对物理资源虚拟的三个主要任务:处理器虚拟化、内存虚拟化和I/O虚拟化。若硬件直接支持虚拟化技术则CPU辅助完成虚拟化过程,在CPU、芯片组以及IO设备等加入专门针对虚拟化的支持,从而高容易、高效的实现虚拟化。

    (三)虚拟化技术的优势
    1.更高的资源利用率——虚拟可支持实现物理资源和资源池的动态共享,提高资源利用率,特别是针对那些平均需求远低于需要为其提供专用资源的不同负载。

    2.降低管理成本——虚拟可通过以下途径提高工作人员的效率:减少必须进行管理的物理资源的数量;隐藏物理资源的部分复杂性;通过实现自动化、获得更好的信息和实现中央管理来简化公共管理任务;实现负载管理自动化。另外,虚拟还可以支持在多个平台上使用公共的工具。

    3.提高使用灵活性——通过虚拟可实现动态的资源部署和重配置,满足不断变化的业务需求。

    4.提高安全性——虚拟可实现较简单的共享机制无法实现的隔离和划分,这些特性可实现对数据和服务进行可控和安全的访问。

    5.更高的可用性——虚拟可在不影响用户的情况下对物理资源进行删除、升级或改变。

    6.更高的可扩展性——根据不同的产品,资源分区和汇聚可支持实现比个体物理资源小得多或大得多的虚拟资源,这意味着您可以在不改变物理资源配置的情况下进行规模调整。

    7.互操作性和投资保护——虚拟资源可提供底层物理资源无法提供的与各种接口和协议的兼容性。

    8.改进资源供应——与个体物理资源单位相比,虚拟能够以更小的单位进行资源分配。

    容器

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

    (一)容器的概念

    一般来说,虚拟机都会有自己的kernel,自己的硬件,这样虚拟机启动的时候需要先做开机自检,启动kernel,启动用户进程等一系列行为,虽然现在电脑运行速度挺快,但是这一系列检查做下来,也要几十秒,也就是虚拟机需要几十秒来启动。
    重新来理解虚拟机的概念,计算机科学家发现其实我们创建虚拟机也不一定需要模拟硬件的输入和输出,假如宿主机和虚拟机他们的kernel是一致的,就不用做硬件输入输出的搬运工了,只需要做kernel输入输出的搬运工即可,为了有别于硬件层面的虚拟机,这种虚拟机被命名为 操作系统层虚拟化:Operating-system-level virtualization也被叫做容器。

    让我们来回顾虚拟机的概念,在虚拟机的系统中,虚拟机认为自己有独立的文件系统,进程系统,内存系统,等等一系列,所以为了让容器接近虚拟机,也需要有独立的文件系统,进程系统,内存系统,等等一系列,为了达成这一目的,主机系统采用的办法是:只要隔离容器不让它看到主机的文件系统,进程系统,内存系统,等等一系列,那么容器系统就是一个接近虚拟机的玩意了。

    (二)容器框架

    Docker使用一个客户端服务器架构。Docker客户端和Docker守护进程交流,Docker守护进程做非常重要的工作,构建,运行和分发你的Docker容器。Docker客户端和守护进程可以运行在同样的系统上,或者是你可以连接一个Docker客户端到一个远程Docker守护进程中。Docker客户端和守护进程通过sockets或通过RESTful API进行沟通交流。
    在这里插入图片描述
    (三)容器内部

    要理解 Docker 内部构建,需要理解以下三种部件:
    Docker 镜像 - Docker images
    Docker 仓库 - Docker registeries
    Docker 容器 - Docker containers

    1.Docker 镜像
    Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。

    2.Docker 仓库
    Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。

    3.Docker 容器
    Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

    (四)为什么使用容器

    1.更高效的利用系统资源
    2.更快速的启动时间
    3.一致的运行环境
    开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现这类问题。
    4.持续交付和部署
    5.更轻松的迁移
    6.更轻松的维护和扩展

    (五)容器与传统虚拟机比较

    传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    参考文章:
    物理机、虚拟机、容器的比较(一)
    物理机、虚拟机、容器的比较(二)

    展开全文
  • 虚拟机和容器的区别 物理机、虚拟机和容器的区别 物理机 虚拟机 容器 虚拟机 (一)虚拟机技术 虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个...

    36.虚拟机和容器的区别

    物理机、虚拟机和容器的区别

    物理机
    在这里插入图片描述
    虚拟机
    在这里插入图片描述
    容器
    在这里插入图片描述

    虚拟机

    (一)虚拟机技术

    虚拟化,是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

    虚拟化是表示计算机资源的逻辑组(或子集)的过程,这样就可以用从原始配置中获益的方式访问它们。这种资源的新虚拟视图并不受实现、地理位置或底层资源的物理配置的限制。

    虚拟化技术可针对具体应用目的创建特定目的的虚拟环境,安全、效率高,快照、克隆、备份、迁移等方便。系统虚拟化是将一台物理计算机虚拟成一台或多台虚拟计算机系统,每个都有自己的虚拟硬件,其上的操作系统任认为自己运行在一台独立的主机上,计算机软件在一个虚拟的平台上而不是真实的硬件平台上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。其中CPU的虚拟化可以单CPU模拟多CPU并行运行,允许一个平台同时运行多个操作系统,并且应用程序可以在相互独立的空间内运行而互不影响。虚拟化技术在降低硬件成本的同时,还可以显著提高系统的工作效率和安全性。

    虚拟化系统的实现通常是在操作系统和硬件之间加入一个虚拟机监控程序,称为Hypervisor(如图所示)。由Hypervisor主要负责各个操作系统之间的硬件资源协调。虚拟机监控程序是一种特殊操作系统,直接在裸机上运行(针对完全虚拟化技术)。虚拟机监控程序创建一个底层硬件平台抽象,一个或多个虚拟机(VM)共享这个底层硬件平台。在这种环境中,VM只是操作系统及其应用程序的容器,一个 VM 与虚拟机监控程序上运行的其他 VMs 隔离,这支持多个操作系统或多个配置不同的相似操作系统。

    在这里插入图片描述
    1.虚拟计算机系统三层含义-同质、高效、资源受控。
    同质-本质上虚拟机和物理机是相同的、表现上有所差异,如一个物理核虚拟多个核。
    高效-虚拟机效能接近物理机。
    资源受控-虚拟机对系统资源有完全的控制能力,包括分配、管理、回收。

    2.虚拟化分不同层面的虚拟化
    硬件抽象层的虚拟化-客户机与宿主机硬件相似,指令集相似。
    操作系统层虚拟化-内核可以提供多个相互隔离的用户态,其拥有独立的文件系统、网络、系统设置和库函数。
    库函数层初始化-是不同的操作系统可以拥有共同的库函数接口,应用程序不需修改。

    编程语言层虚拟化-编的程序运行在一个虚拟机上,与具体硬件无关。如Java。

    3.虚拟机的优点
    良好的封装-虚拟机的运行环境保持便捷,便于随时抓取状态、备份、克隆、挂起和恢复。
    多实例-最大限度减少物理资源,提高利用率,便于管理。
    隔离-每个应用程序可以再独立的操作系统中运行,互不干涉,崩溃也不会影响其他任务。
    硬件无关性-只要拥有相同的硬件抽象层,虚拟机就可以无缝迁移,因此维护和升级简单。
    安全-便于控制访问权利,病毒入侵检测等。

    4.虚拟化分类
    按照虚拟化程度分完全虚拟化和类虚拟化。完全虚拟化-客户及操作系统不需要任何修改即可运行,分软件辅助完全虚拟化和硬件辅助完全虚拟化,完全虚拟化能够模拟所有CPU指令。
    类虚拟化-操作系统需要做出适应性修改,回避那些难以模拟的指令。

    按照宿主机是否存在独立操作系统分为hypervisor模型和宿主模型,前者需支持所有的物理资源管理(系统启动、内存管理、设备驱动等),效率高、复杂;后者只需调用宿主操作系统API实现虚拟化,宿主操作系统可以是windows、linux,效率低、简单。第三类是两者的混和,VMM位于硬件层之上,但让出部分IO设备管理权给一个运行在特权虚拟机上的特权操作系统,VMM负责处理器和内存虚拟化。

    (二)虚拟化技术框架

    虚拟环境组成:硬件、VMM、虚拟机,物理机中操作系统直接管理硬件(通过硬件抽象层HAL),虚拟环境中VMM管理硬件(会构建一个或多个逻辑HAL),操作系统运行在VMM 逻辑HAL之上,运行在非CPU最高特权。

    对物理资源虚拟的三个主要任务:处理器虚拟化、内存虚拟化和I/O虚拟化。若硬件直接支持虚拟化技术则CPU辅助完成虚拟化过程,在CPU、芯片组以及IO设备等加入专门针对虚拟化的支持,从而高容易、高效的实现虚拟化。

    (三)虚拟化技术的优势
    1.更高的资源利用率——虚拟可支持实现物理资源和资源池的动态共享,提高资源利用率,特别是针对那些平均需求远低于需要为其提供专用资源的不同负载。

    2.降低管理成本——虚拟可通过以下途径提高工作人员的效率:减少必须进行管理的物理资源的数量;隐藏物理资源的部分复杂性;通过实现自动化、获得更好的信息和实现中央管理来简化公共管理任务;实现负载管理自动化。另外,虚拟还可以支持在多个平台上使用公共的工具。

    3.提高使用灵活性——通过虚拟可实现动态的资源部署和重配置,满足不断变化的业务需求。

    4.提高安全性——虚拟可实现较简单的共享机制无法实现的隔离和划分,这些特性可实现对数据和服务进行可控和安全的访问。

    5.更高的可用性——虚拟可在不影响用户的情况下对物理资源进行删除、升级或改变。

    6.更高的可扩展性——根据不同的产品,资源分区和汇聚可支持实现比个体物理资源小得多或大得多的虚拟资源,这意味着您可以在不改变物理资源配置的情况下进行规模调整。

    7.互操作性和投资保护——虚拟资源可提供底层物理资源无法提供的与各种接口和协议的兼容性。

    8.改进资源供应——与个体物理资源单位相比,虚拟能够以更小的单位进行资源分配。

    容器

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

    (一)容器的概念

    一般来说,虚拟机都会有自己的kernel,自己的硬件,这样虚拟机启动的时候需要先做开机自检,启动kernel,启动用户进程等一系列行为,虽然现在电脑运行速度挺快,但是这一系列检查做下来,也要几十秒,也就是虚拟机需要几十秒来启动。
    重新来理解虚拟机的概念,计算机科学家发现其实我们创建虚拟机也不一定需要模拟硬件的输入和输出,假如宿主机和虚拟机他们的kernel是一致的,就不用做硬件输入输出的搬运工了,只需要做kernel输入输出的搬运工即可,为了有别于硬件层面的虚拟机,这种虚拟机被命名为 操作系统层虚拟化:Operating-system-level virtualization也被叫做容器。

    让我们来回顾虚拟机的概念,在虚拟机的系统中,虚拟机认为自己有独立的文件系统,进程系统,内存系统,等等一系列,所以为了让容器接近虚拟机,也需要有独立的文件系统,进程系统,内存系统,等等一系列,为了达成这一目的,主机系统采用的办法是:只要隔离容器不让它看到主机的文件系统,进程系统,内存系统,等等一系列,那么容器系统就是一个接近虚拟机的玩意了。

    (二)容器框架

    Docker使用一个客户端服务器架构。Docker客户端和Docker守护进程交流,Docker守护进程做非常重要的工作,构建,运行和分发你的Docker容器。Docker客户端和守护进程可以运行在同样的系统上,或者是你可以连接一个Docker客户端到一个远程Docker守护进程中。Docker客户端和守护进程通过sockets或通过RESTful API进行沟通交流。
    在这里插入图片描述
    (三)容器内部

    要理解 Docker 内部构建,需要理解以下三种部件:
    Docker 镜像 - Docker images
    Docker 仓库 - Docker registeries
    Docker 容器 - Docker containers

    1.Docker 镜像
    Docker 镜像是 Docker 容器运行时的只读模板,每一个镜像由一系列的层 (layers) 组成。Docker 使用 UnionFS 来将这些层联合到单独的镜像中。UnionFS 允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。正因为有了这些层的存在,Docker 是如此的轻量。当你改变了一个 Docker 镜像,比如升级到某个程序到新的版本,一个新的层会被创建。因此,不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做),只是一个新的层被添加或升级了。现在你不用重新发布整个镜像,只需要升级,层使得分发 Docker 镜像变得简单和快速。

    2.Docker 仓库
    Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。同样的,Docker 仓库也有公有和私有的概念。公有的 Docker 仓库名字是 Docker Hub。Docker Hub 提供了庞大的镜像集合供使用。这些镜像可以是自己创建,或者在别人的镜像基础上创建。Docker 仓库是 Docker 的分发部分。

    3.Docker 容器
    Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker 镜像创建的。Docker 容器可以运行、开始、停止、移动和删除。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是 Docker 的运行部分。

    (四)为什么使用容器

    1.更高效的利用系统资源
    2.更快速的启动时间
    3.一致的运行环境
    开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现这类问题。
    4.持续交付和部署
    5.更轻松的迁移
    6.更轻松的维护和扩展

    (五)容器与传统虚拟机比较

    传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    参考文章:
    物理机、虚拟机、容器的比较(一)
    物理机、虚拟机、容器的比较(二)

    展开全文
  • Dalvik 标准Java 虚拟机(JVM)首要差别 Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。 Dalvik Java 运行环境的区别 1:Dalvik主要是完成对象...
    Dalvik 和标准Java 虚拟机(JVM)首要差别
    Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。
    Dalvik 和Java 运行环境的区别
    1:Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
    2:Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
    3:不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex
    4:dex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。
    5:odex是为了在运行过程中进一步提高性能,对dex文件的进一步优化。
    6:所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制
    7:有一个特殊的虚拟机进程Zygote,他是虚拟机实例的孵化器。它在系统启动的时候就会产生,它会完成虚拟机的初始化,库的加载,预制类库和初始化的操作。如果系统需要一个新的虚拟机实例,它会迅速复制自身,以最快的数据提供给系统。对于一些只读的系统库,所有虚拟机实例都和Zygote共享一块内存区域。
    8:Dalvik是由Dan Bornstein编写的,名字来源于他的祖先曾经居住过名叫Dalvík的小渔村,村子位于冰岛。
    展开全文
  • Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用,在低速CPU上表现出的高性能,确实令人刮目相看。 依赖于底层Posix兼容的操作...

    1,Google于2007年底正式发布了Android SDK, 作为 Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它对内存的高效使用,和在低速CPU上表现出的高性能,确实令人刮目相看。 依赖于底层Posix兼容的操作系统,它可以简单的完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例, 其代码在虚拟机的解释下得以执行。

    2,很多人认为Dalvik虚拟机是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言。但是这种说法并不准确,因为Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容;同时还要两个明显的不同:

    1,Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(Dalvik Executable)。

    2,在Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件,而后Java虚拟机会从相应的CLASS文件和JAR文 件中获取相应的字节码;Android应用虽然也是使用Java语言进行编程,但是在编译成CLASS文件后,还会通过一个工具(dx)将应用所有的 CLASS文件转换成一个DEX文件,而后Dalvik虚拟机会从其中读取指令和数据。

    3,Dalvik和Android系统Android作为新一代的基于Linux的开源手机操作系统,其系统架构由下而上可以分为以下几部分:

    • 无序列表1Linux内核
    • 本地库
    • Android运行库
    • 应用框架
    • 应用

    4, java虚拟机和Dalvik虚拟机的区别:

    java虚拟机Dalvik虚拟机
    java虚拟机基于栈。 基于栈的机器必须使用指令来载入和操作栈上数据,所需指令更多更多dalvik虚拟机是基于寄存器的
    java虚拟机运行的是java字节码。(java类会被编译成一个或多个字节码.class文件,打包到.jar文件中,java虚拟机从相应的.class文件和.jar文件中获取相应的字节码)Dalvik运行的是自定义的.dex字节码格式。(java类被编译成.class文件后,会通过一个dx工具将所有的.class文件转换成一个.dex文件,然后dalvik虚拟机会从其中读取指令和数据)
    常量池已被修改为只使用32位的索引,以 简化解释器。dalvik的堆和栈的参数可以通过-Xms和-Xmx更改
    一个应用,一个虚拟机实例,一个进程(所有android应用的线程都是对应一个linux线程,都运行在自己的沙盒中,不同的应用在不同的进程中运行。每个android dalvik应用程序都被赋予了一个独立的linux PID(app_*))

    Dalvik和标准Java虚拟机(JVM)之间的首要差别之一,就是Dalvik基于寄存器,而JVM基于栈。
    Dalvik和Java之间的另外一大区别就是运行环境——Dalvik经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik应用作为一个独立的Linux进程执行
    (1)虚拟机很小,使用的空间也小;
    (2)Dalvik没有JIT编译器;
    (3)常量池已被修改为只使用32位的索引,以简化解释器;
    (4)它使用自己的字节码,而非Java字节码。

    5,Dalvik虚拟机架构:

    在android源码中,Dalvik虚拟机的实现位于“dalvik/”目录下,其中“dalvik/vm”是虚拟机的实现部分,将会编译成libdvm.so;而”dalvik/libdex”将会编译成libdex.a静态库作为dex工具;“dalvik/dexdump”是.dex文件的反编译工具;虚拟机的可执行程序位于“dalvik/dalvikvm”中,将会编译成dalvikvm可执行文件。
    dalvik虚拟机架构:
    这里写图片描述

    6,Android应用编译及运行流程:

    这里写图片描述

    7,Dalvik进程管理:

    dalvik进程管理是依赖于linux的进程体系结构的,如要为应用程序创建一个进程,它会使用linux的fork机制来复制一个进程(复制进程往往比创建进程效率更高)。

    Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,它通过init进程启动。首先会孵化出System_Server(android绝大多系统服务的守护进程,它会监听socket等待请求命令,当有一个应用程序启动时,就会向它发出请求,zygote就会FORK出一个新的应用程序进程).每当系统要求执行一个android应用程序时,Zygote就会运用linux的FORK进制产生一个子进程来执行该应用程序。

    8,JVM和Dalvik进程管理:

    linux中进程间通信的方式有很多,但是dalvik使用的是信号方式来完成进程间通信。

    9,Android的初始化流程:

    这里写图片描述

    展开全文
  • 虚拟机

    2021-03-20 17:33:02
    虚拟机软件 1.虚拟机技术 2.虚拟系统 3.虚拟机分类 4.常用软件 5.Linux虚拟机安装 6.主要用处
  • VMware Workstation虚拟机和Centos7安装 VMware我用的是12.0版本,百度一搜一堆;另外注册码也可以百度搜索,一堆,这里列举几个: VMware 12 Pro 永久许可证激活密钥: 5A02H-AU243-TZJ49-GTC7K-3C61N VF5XA-...
  • Docker和虚拟机区别

    2021-02-24 14:17:19
    1.Docker和虚拟机有各自擅长的领域,在软件开发、测试场景生产运维场景中各有优劣 2.Docker启动快速属于秒级别。虚拟机通常需要几分钟去启动。 3.Docker需要的资源更少,Docker在操作系统级别进行虚拟化,Docker...
  • 虚拟机中vmnet1vmnet8

    千次阅读 2017-08-09 23:45:32
    1.为什么安装虚拟机后,会向本地连接里添加两个虚拟连接(VMnet1VMnet8),这两个连接有分别什么作用,之间有什么区别吗?2.为什么虚拟机ping宿主机能ping通,但是宿主机ping虚拟机不通(我的是VMware ACE,使用...
  • 一、 传统虚拟机架构: 1.1存储划分LUN空间分配给多台服务器使用 1.2服务器安装虚拟化软件,虚拟机保存在存储中 1.3服务器到存储传输速度为8G bit/s、16G bit/s 二、VASN虚拟机架构: 2.1无专用存储 2.2服务器使用...
  • 虚拟机安装CentOS7

    千次阅读 2018-08-21 15:52:24
    一、VMware虚拟机安装 安装文件可以去网上下载 下载后双击vmware12.exe安装包,一路下一步安装成功: 注: 这里把这两个对勾去了,我们这里不检查更新。 点击许可证。 输入以下序列号,完成激活...
  •  今天总结一下前段时间出现的一些虚拟机问题,之前配置的宿主机ping虚拟机以及虚拟机ping外网没有什么问题,但是后来不知道什么原因突然就ping不通了,经过研究解决了该问题顺便了解了一下VM0,1,8区别,为了防止...
  • 创建虚拟机和远程访问虚拟机

    千次阅读 2019-01-10 11:24:05
    本博客旨在记录如何通过VMware vSphere Client来创建虚拟机,同时能够通过本机来远程访问虚拟机。 (1)登录VMware vSphere Client后在主机上右键——新建虚拟机; (2)接下来的流程下一步即可,需要注意的是...
  • VMware虚拟机安装windows7详解

    千次阅读 2019-03-31 16:08:50
    5、虚拟机名称建议取一个能区别其他虚拟机的,位置建议不要放在C盘,可以放在其他盘,并单独建立一个文件夹来存放。 6、1个CPU4核就行 7、内存可以大一点,2G就行 8、网络类型桥接就行...
  • 是不是有很多小伙伴在用虚拟机搭建服务器集群实验是遇到了硬件性能不足的问题呢?你的电脑能开几台虚拟机呢? 2台?3台?8G内存的电脑如果平常优化的好的话一般可以开5台甚至6台虚拟机,每台虚拟机分配1G内存,并且...
  • 虚拟机安装破解密码

    千次阅读 2019-05-26 22:50:36
    选择Linuxred hat enterprise Linux 7 64 位 命名虚拟机和修改安装环境 为此虚拟器指定处理器数量 为虚拟器指定内存,一般为2G ##选择网路类型 选择i/o设备控制器 选择磁盘类型 设置完成 点击编辑虚拟器...
  • 虚拟机包 OVFOVA的区别

    万次阅读 2017-12-05 09:41:10
    开源虚拟化格式OVF文件是一种开源的文件规范,它描述了一个开源、安全、有效、可拓展的便携式虚拟打包以及软件分布格式,它一般有几个部分组成,分别是ovf文件、mf文件、cert文件、vmdk文件iso文件。 二、OVF...
  •      
  • vmnet0,实际上就是一个虚拟的网桥 vmnet0,实际上就是一个虚拟的网桥,这个网桥有很若干个端口,一个端口用于连接你的Host,一个端口用于连接你的虚拟机,他们的...所以在Bridged模式下,你可以让虚拟机成为一台...
  • 虚拟机和主机相互ping不通方法总结

    万次阅读 多人点赞 2019-07-01 20:51:19
    一、【虚拟机和主机相互ping不通的解决方法】 1、主要检查几个方面: 1)检查虚拟网卡有没有被禁用 2)检查虚拟机与物理机是否在一个VMNet中 3)检查虚拟机的IP地址与物理机对应的VMNet是否在一个网段 4)检查...
  • VMware虚拟机克隆网络设置

    千次阅读 2018-08-16 18:53:43
    VMware虚拟机克隆网络设置 VMware虚拟机克隆网络设置 1、查看并分配虚拟机网络 1.1、VMware三种网络模式介绍 1.2、配置网络 1.3、配置DNS 1.4、重启网卡,使配置生效 1.5、关闭防火墙 2、克隆虚拟机 2.1、...
  • 虚拟机的使用视频课程列表获取以上视频课程,点击以下图片打开微信小程序,填写表单获取视频课程虚拟机最大的一个优点就是与物理机隔离,你在虚拟机不管干啥事,就算运行一大堆病毒,依然可以一键还原为原始状态,...
  • 虚拟机和Linux常用命令 1.什么是虚拟机? 虚拟机是具有完整硬件系统功能,运行在一个完全隔离环境中的虚拟化的计算机系统,实体计算机所具备的功能虚拟机都有.值得注意的是,如果在一台实体计算机上创建虚拟机,需要将...
  • 使用Centos7虚拟机时,想要从主机传一些文件到虚拟机,需要使用FTP传输,在主机上装上的CuteFTP的软件,对虚拟机进行配置。 1,首先,要保证虚拟机能够上网  一般装好虚拟机后,只要主机连了网,虚拟机也是有网的...
  • 对于Java程序员来说,在虚拟机自动内存管理机制的帮助下,不再需要手动释放内存,不容易出现内存泄露内存溢出问题。一旦出现内存泄露溢出方面的问题,如果不了解虚拟机是怎样使用内存的,排查错误将会异常艰难。...
  • 文章目录虚拟机安装ssh:本地终端连接虚拟机zsh安装K8S安装过程笔记拉去镜像脚本复制虚拟机修改主机名修改网卡ip地址修改sshd监听地址virtualbox端口转发参考 杂项: window 查看网卡:我的电脑——管理——设备...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 116,195
精华内容 46,478
热门标签
关键字:

虚拟机7和8区别