这个问题估计想过的人不多,先找维基百科看一下虚拟机的定义。

虚拟机的定义有2个,一种是类似Vmware的系统虚拟机,另一种是虚拟机称之为程序虚拟机,诸如JVM,CLR就是最常见到的虚拟机。

程序虚拟机也称作托管运行时环境,运行这个虚拟机时,就好比普通的OS中的一个进程。当这个进程启动时,虚拟机启动,当进程销毁时,虚拟机销毁。使用虚拟机的目的就是提供一个和平台无关的编程环境。

JVM中的执行引擎只能处理编译后的Java字节码,字节码处理引擎其实包含一个字节码解释器和一个JIT编译器(和.net的CLR中JIT差别很大),解释器逐条的执行字节码指令,速度稍慢。JIT编译器则会将热点代码编译缓存起来,因此执行速度加快。

解释器的概念比较简单,它可以将代码翻译,并运行,不需要经过编译,JVM中的解释器正式这样的,JVM中解释的就是字节码。解释器运行程序的方法有3种:

直接运行高级编程语言(如Shell内置的解释器)

转换高级编程语言码到一些有效率的字节码(Bytecode),并运行这些字节码

以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序(例如:JIT)

其中Python的解释器就是属于第二种,Python代码在首次运行时,它会将Python代码编译成字节码,如果可以的话,它会将这个字节码保存到.pyc文件中,这样下次启动的时候就不会再编译这些代码而是直接解释运行字节码。事实上,这种机制正在模糊解释器和编译器之间的界限,或者说是模糊了解释型语言和编译型语言的界限。

通过JVM和解释器的概念澄清,似乎还是不明白为啥JVM就被称为虚拟机,JVM中有运行的是字节码,它可能直接被解释执行,也可能被再次编译成目标语言,Python中的解释器也会先预编译Python代码为字节码,再解释执行。那么到底有啥区别?

很多人参与了讨论,分别从不同的角度去阐述区别。

有人认为虚拟机是和语言无关的,JVM为例,除了Java之外,Scala,Clojure,甚至Python借助于Jython工具,也可以运行在JVM上,而没听说什么语言能有Python解释器解释执行,除了Python。

也有人从语言的类型上,Java为静态类型的语言,而Python为动态语言。这使得Java字节码既可以被解释执行也可以被编译成机器指令再执行。而Python则复杂多了,它虽然让程序员可以不去关注变量的类型,但解释器不得不去推断数据类型,这一定程度上影响性能。

还有观点认为解释器是一个历史遗留术语,现代语言中虚拟机和解释器的分界已经很模糊甚至不存在。

事实上,笔者在《Learning Python》一书中,看到把作者把Python的解释器称为PVM,基于这个事实来讲,本人更认同的是解释器和虚拟机的区别正在越来越小,已经是我中有你,你中有我的地步。独立的分割来看,可能还能区分这几步是解释器行为,这几步是虚拟机的行为,但是作为一个整体来看,两者的区别确实没那么明显。

作者:cnn237111

来源:51CTO

凭啥Java运行环境称虚拟机 Python只能称解释器相关推荐

  1. 定制化Azure站点Java运行环境(1)

    Azure website提供了为现代化的web应用程序快速部署的PAAS平台,可以让用户几分钟之内快速的将自己的应用部署到云端,并且提供了自动扩展(auto-scaling),SSL,多种语言(Ja ...

  2. java开发环境怎么写_Java开发基础设置:如何配置Java运行环境

    很多朋友都有自学Java的愿望,但是自学一门语言何其艰难,没人指引的话往往不得其门而入.那么,今天千锋老师就给大家带来Java入门课程中配置Java运行环境的方法,希望能够对大家有所帮助. 一.JDK ...

  3. java runtime environment 55_jre7下载|Java Runtime Environment(Java运行环境JRE)JRE7 官方版_ - 极光下载站...

    JRE7是Java运行环境,(JRE为JavaRuntimeEnvironment的简称,Java运行环境),JRE7运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库. jav ...

  4. spo机试题JAVA_基于龙芯处理器的Java运行环境的移植与优化

    摘要: 研发我国自主的高性能处理器芯片在经济和国家安全方面具有重要意义,龙芯系列处理器的成功研制填补了我国自主高性能通用处理器的空白.龙芯的一个重要应用方向是企业服务器,在企业服务应用上目前Java/ ...

  5. java 1.8下载_jre1.8官方下载-JAVA运行环境(jre8 64位)1.8.0.25 官网最新版【离线版】下载_东坡手机下载...

    Java 是一个通用术语,用于表示 Java 软件及其组件,包括"Java 运行时环境 (JRE)"和"Java 虚拟机 (JVM)". 相信很多用户都用过JA ...

  6. 安装jre运行环境_如何下载安装java运行环境jre

    如果你只需要运行Java程序或Applet,下载并安装它即可.如果你要自行开发Java软件,请下载JDK.在JDK中附带有JRE.注意由于Microsoft对Java的支持不完全,请不. . Java ...

  7. 下载安装Java运行环境

    安装Java运行环境 Java 是一种并发.基于类.面向对象.尽可能独立的通用程序设计语言,旨在让应用程序开发人员WORA (Write Once,Run Anywhere,编写一次,到处运行),即在 ...

  8. 手机JAVA运行环境下载_Java运行环境包

    Java运行环境包是一款用于帮助Java程序搭建运行环境的软件.Java语言是一个运用性极强的语言,它为我们提供了高度的安全性和跨平台的特性,许多软件程序都是由Java语言所开发,但是如果您的电脑上没 ...

  9. 一、java运行环境配置

    文章目录 前言 一.Java 重要特点 二.Java 运行机制及运行过程 1.Java 语言的特点:跨平台性 2.Java 核心机制-Java 虚拟机 [JVM java virtual machin ...

最新文章

  1. MVC项目下 Telerik Upload 的使用方法
  2. python爬虫requests-Python爬虫(requests模块)
  3. CentOS7下搭建Nginx+PHP7的安装配置
  4. strlen函数_7.2 C++字符串处理函数
  5. html实战例子: 点击图片超链接跳转
  6. java set第n位_数据结构与算法——常用数据结构及其Java实现
  7. java eclipse 内存_java – Eclipse 3.5.1使用大量内存
  8. php添加公告代码,为wordpress增加网站公告功能
  9. WordPress的cookie处理
  10. Python并发编程—进程
  11. 使用密码摘要生成器扩展JMeter
  12. html输入支付密码样式,基于JS实现类似支付宝支付密码输入框
  13. WCF技术剖析之十七:消息(Message)详解(上篇)
  14. springboot 历史版本文档_这个男人练了整整二年的SpringBoot看他如何教你学学学!...
  15. Linq to Xml (1) 创建和查询包含命名空间的XML文档
  16. python第三方库:使用Jieba对抓取的数据进行中文分词
  17. 给儿子讲美国独立战争
  18. 【微信辅助】疫情当前,python帮你找出朋友圈的武汉朋友给予关怀
  19. 记我的启蒙老师谢朝晖老师
  20. 共探人工智能新发展,AICON 2022即将重磅开启

热门文章

  1. vs widows服务的发布
  2. pygame系列_mouse鼠标事件
  3. 百行代码打造一个DI容器(支持瞬时生命周期、单利生命周期、构造函数自动注入、属性自动注入、字段自动注入)...
  4. 深度学习在锦囊细选上的应用
  5. 如何使用Coded UI Test对Webpage进行自动化测试
  6. rundll32.exe文件详解
  7. 第二届中国云计算应用论坛圆满落幕
  8. 【朱-刘算法】【最小树形图】hdu6141 I am your Father!
  9. ZooKeeper 基本介绍
  10. Vmware安装提示在关闭以下进程 之前,无法进行安装的解决办法