今天看书的时候突然想到了一个关于虚拟机的问题,jvm到底是如何屏蔽掉底层的操作系统而到达跨平台的。我们知道java的虚拟机一般都是这么解释的“Java虚拟机(JVM)是Java Virtual Machine的缩写,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的。Java虚拟机有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统”。
当我们编译java源文件的时候,编译器对源码进行编译,将他们编译成只有jvm“认识”的字节码文件(只有0101组成的代码),对于这些2进制代码,只要是计算机都能进行执行,当让,包含了对应的上下文的情况下。其实对于虚拟机这个东西我不太懂,毕竟都是在一个cpu和寄存器中执行指令,何来虚拟一说?,如何虚拟?还有,对于不同的平台,为什么会要有平台差异,差异在哪里,执行相同逻辑甚至相同代码为在不同平台上进行执行的时候到底有和差异?
让我们看一个简单的java代码清单:public class Jvm{
static{
System.out.println("this is a test");
}
}
下面是其字节码信息:
public class Jvm extends java.lang.Object{
public Jvm();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
static {};
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String this is a test
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
}
其实这些反汇编的字节码其实真正代码的还是2进制代码,这些代码+上下文信息只有jvm知道,每一条指令对应的2进制代码比如aload_0,将位置为0的对象引用局部变量压入栈中(这是逻辑上的,真是情况还是将内存中的某一个地址传递给内存的另外一个变量,然后进行方法的执行,最后返回这个地址并且给这个地址和后N个地址中存储相应的值,这就是类的初始化),可以在cpu中可以是10011.....可以是00111....这取决于不同操作平台对于地址转移指令的具体实现,就像是不同的文件格式linux可以打开,windows都不能识别,因为操作系统对于文件的解析和执行是需要特定的标识或者格式,这些表示和格式内嵌于操作系统中。
关于如何实现虚拟机,我看了深入理解java虚拟机,具体讲的是很好,可是我没学过C(仅仅懂一点),所以那些jvm规范很难实现,反正最后说简单点,java的跨平台是通过相同2进制代码在不同平台上不同的执行机制,达到的功能还是一样的。。
分享到:
相关推荐
### 关于虚拟机的逃逸技术 #### 一、虚拟机逃逸技术概述 虚拟机技术为现代计算环境带来了极大的便利性和灵活性,它允许在同一物理机器上运行多个独立的操作系统实例,有效地隔离了不同的应用程序和服务。然而,...
虚拟机技术是现代计算机科学中的一个重要组成部分,它允许在一台物理计算机上运行多个独立的、完整的操作系统实例。这种技术极大地提升了资源利用率,并为用户提供了在不同操作系统环境之间切换的便利。在本文中,...
虚拟机是计算机系统中的一种特殊软件,可以模拟整个计算机系统的运行环境,支持多种操作系统的安装和运行。实验的主要目的是实现虚拟机的安装和虚拟机系统的安装。 实验环境中使用的软件是VMware Workstation 6.0...
在虚拟机上安装 Linux 是一项非常重要的实验,旨在熟悉 Linux 网络环境,掌握其中的网络命令的使用。在这个实验中,我们将使用 VMware 虚拟机软件在 Windows 环境下安装 Linux 操作系统,并熟悉 Linux 系统命令和...
### 关于虚拟机设置网卡的问题 在讨论虚拟机网络配置的过程中,首先需要理解不同网络模式的基本原理及其应用场景。根据题目中的描述与部分文件内容,本文将深入解析虚拟机网络配置的相关知识点,主要包括:桥接...
【虚拟机实用技巧 FAQ 一】 1. VMware Tools 安装问题详解: VMware Tools 是 VMware 虚拟化环境中一套重要的工具集,它能够显著提升虚拟机的性能和用户体验。如果你遇到安装困难,可以尝试以下步骤: 首先,确保...
虚拟机技术是现代计算机科学中的一个重要分支,它允许在单个物理硬件系统上运行多个独立的虚拟环境,每个环境都称为一个虚拟机。虚拟机分区是这个领域中的核心概念之一,它涉及到如何有效地管理和分配资源,以确保每...
虚拟机是一种计算机软件,它允许用户在一台物理机器上运行多个独立的、完全模拟的计算机系统,这些系统称为虚拟机实例。在IT行业中,虚拟化技术是云计算和数据中心管理的关键组成部分,极大地提高了资源利用率和灵活...
随着云计算和虚拟化技术的发展,虚拟机已成为企业数据中心不可或缺的一部分。在众多虚拟化技术中,KVM(Kernel-based Virtual Machine)因其开源、高效等特点而受到广泛青睐。本文将详细介绍虚拟机桥接方法以及...
标签“FanucCNC”强调了这是关于Fanuc的数控系统,“虚拟机”指的是模拟Fanuc CNC硬件的软件,“wm”可能代表Windows版本的虚拟机。 部分内容中的链接是一个百度网盘的分享链接,用户可以通过输入提取码“47ik”来...
vmware设置主机与虚拟机各有一个IP
《Hyper-V 2012 R2:第一代与第二代虚拟机优缺点比较》 在Windows Server 2012 R2中的Hyper-V虚拟化平台中,引入了两种不同类型的虚拟机架构:第一代虚拟机(Gen 1)和第二代虚拟机(Gen 2)。这两种架构各有其特点...
在IT领域,虚拟机清理是一项重要的维护任务,它涉及到对运行在物理主机上的虚拟环境进行优化,以确保系统的高效运行和资源的有效利用。虚拟机清理通常包括删除无用的虚拟机、清理虚拟硬盘、更新虚拟机配置以及管理...
在IT领域,虚拟机是一种至关重要的技术,它允许软件在一个模拟的环境中运行,与实际硬件隔离开来。本文将深入探讨“一个小型虚拟机的实现”这个主题,这是基于C++编程语言的一个项目,旨在帮助读者理解虚拟机的基本...
在IT领域,尤其是在移动应用开发或者测试中,"Android Windows虚拟机"是一个非常重要的工具,它使得Windows用户能够在他们的个人电脑上运行安卓操作系统,无需拥有真正的Android设备。这个虚拟机解决方案为开发者、...
配置虚拟机网络是虚拟机技术中的一项重要功能,它允许虚拟机与主机进行通信,实现了虚拟机与外部网络的连接。在本文中,我们将详细介绍如何配置虚拟机网络,实现虚拟机与主机的互通和上网。 虚拟机网络配置的必要性...
《SunnyApril自制虚拟机第一部分汇编器源码》是由Conmajia「野比」编写的关于构建虚拟机的代码资源,旨在帮助开发者理解虚拟机的内部运作机制,特别是与汇编语言相关的部分。本项目的核心是用C#语言实现的虚拟机,...
"虚拟机(VMware)和宿主机配置成一个局域网" 把虚拟机(VMware)和宿主机配置成一个局域网是指将虚拟机和宿主机配置成网络上是主从关系的局域网,两者 IP 地址不在同一网段,宿主机是通向外网或另一局域网的网关。...
在IT领域,虚拟机技术是实现资源高效利用和系统隔离的重要手段之一。虚拟机(Virtual Machine,简称VM)是一种能够创建、运行独立操作系统环境的软件技术。它可以在单个物理机器上模拟出多个完整的计算机系统,每个...