`
Kingson_Wu
  • 浏览: 111298 次
文章分类
社区版块
存档分类
最新评论

凭啥Java的运行环境称虚拟机,Python的只能称解释器

 
阅读更多
原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://cnn237111.blog.51cto.com/2359144/1616091

看到Stackoverflow上有个问题在讨论Java和Python的对比,其中就有人问答为啥Java的运行环境被称之为JVM,而Python的只能叫做Interpreter。

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

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

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

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

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

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

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

  3. 以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序(例如: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,基于这个事实来讲,本人更认同的是解释器和虚拟机的区别正在越来越小,已经是我中有你,你中有我的地步。独立的分割来看,可能还能区分这几步是解释器行为,这几步是虚拟机的行为,但是作为一个整体来看,两者的区别确实没那么明显。

本文出自 “一只博客” 博客,请务必保留此出处http://cnn237111.blog.51cto.com/2359144/1616091

分享到:
评论

相关推荐

    Python必学教程 Python开发工具 高效Python编程神器 最全Pycharm教程 - 精编版 共331页.pdf

    4—有关Python解释器的相关配置 42 5—Python快捷键相关设置 51 6—将Pycharm作为Vim编辑器使用 55 7—虚拟机VM的配置 62 8—Django工程的创建和管理 71 9—创建并运行一个基本的Python测试程序 85 10—Pycharm调试...

    【Python基础】02.Python环境搭建以及PyCharm的安装和配置

    如果想要运行代码,就需要Python解释器去执行.py文件。环境搭建其实就是安装Python的解释器。Python的解释器有以下几种: CPython 当我们从Python官方网站下载并安装好Python后,我们就直接获得了一个官方版本的解释...

    openlca-python-tutorial:解释Python(Jython)中openLCA API的用法

    是Java应用程序,因此可在Java虚拟机(JVM)上运行。 是在JVM上运行的Python 2.7实现。 它将Python代码编译为Java字节码,然后在JVM上执行。 Jython 2.7的最终版本与openLCA捆绑在一起。 在“ Window > Developer ...

    pyjvm:在Nintendo Switch上运行Java字节码(.class文件)!

    如果您只想运行已编译的字节码,则只需一个Python解释器。 运行测试 该项目带有许多单元测试。 如果运行shell脚本test.sh ,它将在示例目录中编译Java文件并运行单元测试。 您将能够看到通过了多少测试以及失败了...

    实例详解Matlab 与 Python 的区别

    Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议[2] 。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进。  Python执行:  Python在执行时...

    CoBOL-GraalVM:用GraalVM编译和执行CoBOL

    在另一个文档 Oracle使用称为低级虚拟机(LLVM)的编译器解释了VM可以作为本机代码的解释器。 这些本机代码是C,C ++,FORTRAN,Rust,COBOL和Go。 现在越来越多了! 作为一名前大型机/ CoBOL开发人员,我希望看到...

    py4j-0.10.4.zip

    Py4J 使得 Python 程序可以利用 Python 解释器直接调用Java虚拟机中的 Java 对象,也可以让 Java 调用 Python 对象,有点像 Python 版的 JNI。

    m4j:JAVA 腮腺炎

    尝试为 Java 虚拟机 (JVM) 创建一个 MUMPS 运行时环境,类似于 Groovy、Scala、Ruby、Python 等其他编程语言如何利用 JVM 平台 可以解释和执行 M 代码的基于 ANTLR 的词法分析器/解析器 可以将M代码编译成JVM字节码...

    机器人编程语言python-10大热门机器人编程语言,你掌握了哪种?.pdf

    相反,Java虚拟机 在运⾏时解释指令。使⽤Java的理论是,由于Java虚拟机,您可以在许多不同的机器上使⽤相同的代码。 9. Python Python(和C++)是ROS中两种主要的编程语⾔。与Java不同,Python的重点是易⽤性,...

    Complier-Interpreter-Design-SER502:编程语言切片的编译器和虚拟机,一种为SER 502类项目创建的简单语言

    用于开发解释器和中间代码的工具是ANTLR,IntelliJ IDEA,PyCharm 安装说明: 要运行它: 下载Slice.zip文件 解压缩zip文件并转到命令行 编写一个Slice程序并将其保存为文本文件 运行java -jar Slice.jar input....

    考试系统软件java源码-cs345:旧金山大学CS345编程语言

    在本课程中,学生将学习实现编程语言的关键元素,例如虚拟机解释器、类型系统、符号表、内存分配、垃圾收集和解析。 学生还将学习各种编程范式,例如:面向对象编程、函数式编程和声明式编程。 我们还将对线程编程...

    java笔试题算法-BoAT-X-Framework:BoAT-X物联网区块链应用框架

    其中一些需要繁琐的虚拟机或解释器来执行,有些甚至必须在运行时动态下载代码。 与此同时,物联网设备并不那么强大,通常运行 RTOS 或轻量级 linux。 由于资源有限,大多数物联网设备只能支持原生 C 语言应用程序,...

    backend:初步学习过程实践库

    Java编译型语言如C,C ++,代码是直接编译成机器代码执行,但是不同的平台(x86,ARM等)CPU的指令集不同,因此,需要编译类型语言如Python,Ruby没有这个问题,可以由解释器直接加载源码然后运行,代价是运行效率...

    CompilerJobs:面向在此领域寻找工作的人员的编译器,语言和运行时团队的列表

    编译器,语言和运行时团队面向在此领域寻找工作的人员的编译器,语言和运行时团队的... 阿祖尔 :outbox_tray: Java虚拟机Falcon JIT编译器(LLVM) 博多 :outbox_tray: :world_map: 宾夕法尼亚州匹兹堡Python,LLVM 脑

    Tcl_TK编程权威指南pdf

    Tcl解释器已经从Unix平台移植到了DOS、Windows、OS/2、NT以及Macintosh环境中,而TK工具包也从X window系统移植到了Windows和Macintosh环境中。 1988年,当我在Berkeley做ousterhout教授的博士生时,第一次听说了...

    RED HAT LINUX 6大全

    5.7 GNU Window Maker窗口管理器特性 82 5.7.1 重要的文件 82 5.7.2 配置Window Maker 82 5.8 fvwm2窗口管理器 83 5.9 fvwm窗口管理器 83 5.10 twm窗口管理器 84 5.11 公共桌面环境特性 86 5.12 使用RPM安装Red Hat ...

    Bin-Stretching-Lower-Bounds:我们使用博弈论概念来自动生成在线打包调度问题的下界。 源代码是一个概念证明,应用于 bin 拉伸问题

    需要指定java虚拟机的路径。 其他选项可以保持不变,除非重新组织目录或用户想要使用不同的求解器。 程序依赖项是 Python 和 PyYaml(用于解析配置文件)。 对于其他依赖项,导入是动态完成的,因此只需要满足...

    VC与Labview、Matlab编程论文资料[2].rar

    Python+语言的可视化编程环境的设计与实现.pdf s3c6410中MFC的研究与应用.pdf VB与VC_环境下基于MapX的二次开发比较.pdf VC++环境下快速可重组测控实验系统的开发.pdf VC6_0与MATLAB7_x混合编程方法研究.pdf VC_6_0...

    VC与Labview、Matlab编程论文资料

    Python+语言的可视化编程环境的设计与实现.pdf s3c6410中MFC的研究与应用.pdf VB与VC_环境下基于MapX的二次开发比较.pdf VC++环境下快速可重组测控实验系统的开发.pdf VC6_0与MATLAB7_x混合编程方法研究.pdf VC_6_0...

    VC与Labview、Matlab编程论文资料[4].rar

    Python+语言的可视化编程环境的设计与实现.pdf s3c6410中MFC的研究与应用.pdf VB与VC_环境下基于MapX的二次开发比较.pdf VC++环境下快速可重组测控实验系统的开发.pdf VC6_0与MATLAB7_x混合编程方法研究.pdf VC_6_0...

Global site tag (gtag.js) - Google Analytics