当前位置: 首页 > 面试题库 >

Java“虚拟机”与Python“解释器”的用语?

翁和正
2023-03-14
问题内容

在Java中始终使用“虚拟机”时,很少会读到Python“虚拟机”。

两者都解释字节码;为什么一个叫虚拟机,另一个叫解释器


问题答案:

虚拟机是一种虚拟计算环境,具有一组特定的原子定义良好的指令,这些指令独立于任何特定语言而受支持,通常将其视为自身的沙箱。VM与特定CPU的指令集相似,并且趋向于在更基本的层次上使用与下一条指令无关的此类指令(或字节码)的非常基本的构建块。指令仅基于虚拟机的当前状态确定性地执行,而不依赖于该时间点上指令流中其他位置的信息。

另一方面,解释器则更为复杂,因为它经过精心设计以解析某种语法流,该流必须是特定语言和特定语法的流,这些流必须在周围标记的上下文中进行解码。您无法孤立地查看每个字节甚至每一行,而确切地知道下一步该做什么。语言中的令牌不能像虚拟机的指令(字节码)那样孤立地获取。

Java编译器将Java语言转换为字节码流,这与C编译器将C语言程序转换为汇编代码无异。另一方面,解释器并没有真正将程序转换为任何定义良好的中间形式,它只是将程序操作作为解释源代码的过程。

对VM和解释器之间差异的另一项测试是,您是否认为它与语言无关。我们所知道的Java
VM并不是真的特定于Java。您可以使用其他语言制作编译器,从而产生可以在JVM上运行的字节码。另一方面,我认为我们真的不会考虑将Python以外的其他语言“编译”为Python以便由Python解释器解释。

由于解释过程的复杂性,这可能是一个相对较慢的过程……特别是分析和标识语言标记等,并理解源的上下文以能够在解释器中进行执行过程。为了帮助加速此类解释语言,我们可以在此处定义更易于直接解释的预解析,预标记化源代码的中间形式。这种二进制形式仍在执行时进行解释,它只是从一种人类可读性差的形式开始,以提高性能。但是,执行该形式的逻辑不是虚拟机,因为仍然不能孤立地获取这些代码-
周围令牌的上下文仍然很重要,它们现在处于另一种计算机效率更高的形式。



 类似资料:
  • 一、运行时数据区域 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 二、垃圾收集 判断一个对象是否可被回收 引用类型 垃圾收集算法 垃圾收集器 三、内存分配与回收策略 Minor GC 和 Full GC 内存分配策略 Full GC 的触发条件 四、类加载机制 类的生命周期 类加载过程 类初始化时机 类与类加载器 类加载器分类 双亲委派模型 自定义类加载器实现 参

  • 我正在研究java wicket框架和Apache Tomcat。当我尝试 启动tomcat时出现了问题,它显示Java Virtual Machine Launcher弹出窗口“无法创建 Java Virtual Machine”。 单击弹出窗口上的“OK”按钮后,它显示控制台上的错误。 初始化虚拟机时出错。 无法为对象堆保留足够的空间。 请给我任何参考或建议。 提前感谢。

  • Java 虚拟机屏蔽了与具体操作系统平台相关的信息,使得 Java 语言编译程序只需生成在 Java 虚拟机上运行的目标代码,就可以在多种平台上不加修改地运行。

  • 一、前言 本部分内容是关于Java虚拟机的一些面试高频知识点的总结。说到对Java虚拟机的学习,就不得不提下这本书《深入理解Java虚拟机》。 本部分的内容也是基于这本书进行整理的,这本书基本是面试必备。 关于Java虚拟机,重点考察以下三个方面的内容: 内存区域/内存模型 类加载机制 垃圾收集算法/收集器 二、目录 对象的创建、内存布局和访问定位 Java内存区域与内存模型 Java类加载机制及

  • 1)在JVM Java堆、Perm生成或本机堆中发生OutOfMemory时,操作系统会使用交换空间吗?还是本机堆中OutOfMemory使用交换空间? 2)本机堆大小在JVM上是不可配置的,因为OS会在运行时将可用的RAM分配给JVM? 3)我们如何为JVM启用交换空间,或者默认情况下为Unix和Windows级别的所有进程启用交换空间? 5)如何在Unix和WINDOWS操作系统中禁用交换空间

  • 前面说到,虚拟机是真机的一种模拟,而栈虚拟机模拟的是基于栈计算的机器,和现在常见的基于寄存器的硬件机器不同,于是相应的也有基于寄存器的虚拟机,不过这个虚拟机可能跟真机差别比较大 首先可以看看真机用寄存器的原因,计算机的存储有一个规律,访问速度越快的存储,单价(单位容量的成本)越高,因此实际实现的时候,容量会很受限,反之因为便宜而容量可以很大的存储,储存速度就慢,访问速度(或单价)从高到底大致是寄存