精华内容
下载资源
问答
  • 编译器和解释器区别In this tutorial you will learn about difference between compiler and interpreter i.e. compiler vs interpreter. 在本教程中,您将了解编译器和解释器之间的区别,即编译器与解释器。 We ...

    编译器和解释器区别

    In this tutorial you will learn about difference between compiler and interpreter i.e. compiler vs interpreter.

    在本教程中,您将了解编译器和解释器之间的区别,即编译器与解释器。

    We know that computers can only understand machine language which is in binary format. But we write in natural programming language (like C, Java etc). So there must be something which converts these programming instructions into machine understandable instructions. Those are compilers and interpreters. Both are intended for same purpose. But there they differ in the way they accomplish the task.

    我们知道计算机只能理解二进制格式的机器语言。 但是我们用自然编程语言(例如C,Java等)编写。 因此,必须有某种东西可以将这些编程指令转换为机器可理解的指令。 这些是编译器和解释器。 两者都是出于相同的目的。 但是他们在完成任务的方式上有所不同。

    Compiler: Compiler can be defined as, it is a computer program, that used to convert high level instructions or language into a form that can be understood by the computer which is called low level language. There are specific compilers for certain specific languages. After compilation an executable file will be generated.

    编译器 :编译器可以定义为计算机程序,用于将高级指令或语言转换为计算机可以理解的形式,称为低级语言。 有某些特定语言的特定编译器。 编译后,将生成一个可执行文件。

    Interpreter: The programs created in high level languages can be executed by using different ways. The first one is the use of compiler and the other method is to use an interpreter. High level instruction or language is converted into intermediate from by an interpreter. The advantage of using an interpreter is that the high level program does not goes through compilation stage, which can be a time consuming method. So by using interpreter high level program executed directly.

    口译员:使用高级语言创建的程序可以通过不同方式执行。 第一种是使用编译器,另一种方法是使用解释器。 高级解释器或语言由口译员转换为中间语言。 使用解释器的优点是高级程序不会经过编译阶段,这可能是一种耗时的方法。 因此,通过使用解释器可以直接执行高级程序。

    All most all high level programming languages have compilers and interpreters. But some languages like LISP and BASIC are designed in such a way that the programs made using them are executed by an interpreter.

    所有大多数高级编程语言都有编译器和解释器。 但是,某些语言(如LISP和BASIC)的设计方式是使使用它们编写的程序由解释器执行。

    Now we will see some differences between them.

    现在,我们将看到它们之间的一些差异。

    编译器和解释器之间的区别 (Difference between Compiler and Interpreter)

    CompilerInterpreter
    1) Compiler converts high level instructions into machine understandable instructions.1) Interpreter directly executes high level code without converting.
    2) Before execution, entire program will be executed by compiler.2) Interpreter executes line by line. So after translating first line only it executes second line and so on.
    3) If there any compiler errors, it shows entire programs compiler errors once. First line error won’t stop program to be executed in compiler.3) If there any errors, only one line error displayed at once. Not all at once like compiler. Error in nth line will stop execution of lines form n+1.
    4) After compilation an executable file will be created. That will be executed for program output.4) Interpreter is required by an interpreted program each time.
    5) We can use object code which is generated by compiler (like .exe, a.out files) repeatedly, without executing original program every time. Unless we want to change original program.5) In interpreter whenever we want output of program we should execute entire original program.
    6) Compilation need more extra space since an extra executable file will be generated.6) Requires less memory space. Because no need to store any intermediate code.
    7) Compiled code runs faster than original code. This way of doing is faster than using interpreter7) There is no intermediate code generation/executable files. Each time entire program must be executed. Therefore interpreted program is slower than compiled program.
    8) It is faster in assigning memory to variables and accessing those.8) Access to variables is also slower in an interpreter because the mapping of identifiers to storage locations must be done repeatedly at run-time rather than at compile time.
    9) Spends a lot of time analyzing and processing the program.9) Relatively little time is spent analyzing and processing the program.
    10) Native compiler, cross compiler, Source to source compiler, one pass compiler, incremental compiler, source compiler are some different types of compilers.10) Bytecode interpreter, threaded code interpreter, abstract syntax tree interpreter are some types of interpreters.
    11) Example: C, Java compilers11) Example: LISP, BASIC interpreters
    编译器 口译员
    1)编译器将高级指令转换为机器可理解的指令。 1)解释器无需转换即可直接执行高级代码。
    2)在执行之前,整个程序将由编译器执行。 2)解释器逐行执行。 因此,在翻译第一行之后,仅执行第二行,依此类推。
    3)如果有任何编译器错误,它将一次显示整个程序的编译器错误。 第一行错误不会停止要在编译器中执行的程序。 3)如果有任何错误,一次仅显示一行错误。 并非一次都像编译器一样。 第n行中的错误将停止执行n + 1行。
    4)编译后,将创建一个可执行文件。 将执行该程序以输出程序。 4)解释程序每次都需要口译员。
    5)我们可以重复使用由编译器生成的目标代码(如.exe,a.out文件),而不必每次都执行原始程序。 除非我们要更改原始程序。 5)在解释器中,每当我们要输出程序时,都应执行整个原始程序。
    6)编译需要更多的额外空间,因为将生成一个额外的可执行文件。 6)需要更少的内存空间。 因为不需要存储任何中间代码。
    7)编译后的代码比原始代码运行得更快。 这种方式比使用解释器更快 7)没有中间代码生成/可执行文件。 每次必须执行整个程序。 因此,解释程序比编译程序慢。
    8)将内存分配给变量并访问变量更快。 8)在解释器中对变量的访问也较慢,因为标识符到存储位置的映射必须在运行时而不是在编译时重复进行。
    9)花费大量时间分析和处理程序。 9)花费相对较少的时间来分析和处理程序。
    10)本机编译器,交叉编译器,源到源编译器,一遍编译器,增量编译器,源编译器是一些不同类型的编译器。 10)字节码解释器,线程代码解释器,抽象语法树解释器是某些类型的解释器。
    11)示例:C,Java编译器 11)示例:LISP,BASIC解释器

    Comment below if you have queries related to above tutorial for difference between Compiler and Interpreter.

    如果您对上面的教程有疑问,请对下面的注释进行评论,以了解编译器和解释器之间的区别。

    翻译自: https://www.thecrazyprogrammer.com/2014/07/compiler-vs-interpreter.html

    编译器和解释器区别

    展开全文
  • 在本文中小编给读者们整理了关于python编译器和解释器区别的知识点内容,有兴趣的朋友们跟着学习下。
  • 编译器和解释器之间的区别

    千次阅读 2020-04-29 08:48:05
    根据他们的定义,编译器和解释器之间的区别似乎很明显: 解释器可以直接执行以编程语言编写的指令的程序 编译以低级语言转换源代码的程序 但是,如果您深入研究,可能会发现两者之间有些模糊 。 实际上,...

    根据他们的定义,编译器和解释器之间的区别似乎很明显:

    • 解释器可以直接执行以编程语言编写的指令的程序
    • 编译以低级语言转换源代码的程序

    但是,如果您深入研究,可能会发现两者之间有些模糊

    实际上,解释器可以以中间形式翻译源语言,以加快执行速度。 依赖虚拟机的语言通常会发生这种情况。 这自然会引起一些问题:

    使用虚拟机的所有语言都可以解释吗?

    它们都是实际编译的吗?

    您可能会说两种 :一种语言首先以一种中间形式/语言进行编译,然后在运行时解释这种中间事物。 这也导致了另一个问题,编译器和解释器不应被视为一个程序,而应被视为系统中更多的程序。 作为用户,您作为编译器认为的实际上可能包含多个程序。 例如,它可能包含一个链接程序:一种将不同的目标文件组合到一个文件中的程序,以便可以更轻松地使用它。 口译员可以说类似的话。

    您能告诉我有关编译器和解释器的所有信息吗?

    那么,构成编译器或解释器的所有部分是什么? 您可以为学术界中的此类问题寻求精确的技术答案。 或者,您可以在StackOverflow上找到有关这些问题的讨论。

    作为开发人员甚至是语言的创建者,对我们真正重要的是与他们合作的区别。 两者都有优点和缺点,实际上,某些语言可以同时具有解释器和编译器,也可以具有多个。 这就是我们要看到的。

    要点仍然存在:解释器现在执行代码,编译器准备源代码以供以后执行。 所有实际的差异都源于这些不同的目标。

    您如何分发程序

    实际上,一个重要区别是编译器生成独立程序,而解释程序始终需要解释器才能运行。

    有了已编译的程序后,您可以运行它而无需安装任何其他程序。 这简化了分配。 另一方面,可执行文件在一个特定平台上工作 :不同的操作系统和不同的处理器需要不同的编译版本。

    如果要解释程序,则可以将同一副本分发给不同平台上的用户。 但是,他们需要在特定平台上运行的解释器 。 您可以分发原始源代码或中间形式。 查看解释器的一种直观方法是:就像JavaScript中的eval函数一样。 它可以在JavaScript工作的任何地方工作,但是需要Java解释程序才能运行该平台。

    跨平台支持

    这是技术上的差异,会导致重大的实际后果: 使用解释性编程语言制作跨平台程序更加容易

    这是因为在大多数情况下,您只是在为解释器平台创建程序。 它将由解释器本身将其转换为适用于实际平台的适当形式(例如Windows / Linux和x86 / ARM)。 当然,您必须了解每个平台仍然存在一些差异。 一个常见的示例是目录分隔符。

    相反,在编译程序时,您需要注意每个平台之间的所有微小差异。 发生这种情况的部分原因是,编译语言往往是较低级的语言,例如C ++,因此它们使您对系统的访问权限降低,从而承担更多责任。 但是另一个原因是,您正在使用的所有库都需要自己支持不同的平台。 因此,如果它们不支持Windows,则不能支持Windows。

    速度有多张面Kong

    同样,在速度方面,我们有一个悖论:编译器比解释器快和慢。 许多人都知道编译的程序比解释的程序要快得多,但这不是全部。 相比于解释程序,已编译程序的运行速度更快,但是与仅解释程序相比,编译和运行程序要花费更多时间

    编译器确实可以产生更快的程序。 从根本上说,这是因为它必须只分析一次每个语句,而解释器必须每次都分析它。 此外,编译器可以优化其生成的可执行代码。 那是因为它确切地知道它将在哪里运行,而且还需要花费时间来优化代码。 时间会使解释太慢。

    运行速度与开发速度

    您可能会认为这很挑剔:如果您编译的程序运行速度更快,则编译所花费的时间并不重要。 这通常是老派观点。 毫无疑问,最终程序运行的次数比编译的次数多。 那么谁在乎开发是否需要更多时间呢? 好吧,可以肯定的是,它对发展采取了一种“痛苦的态度”,这种态度令人钦佩。 但是,如果运行时的收益无关紧要,而开发生产力的损失却是巨大的,那该怎么办呢?

    创建操作系统是一回事,而制作自拍应用程序则是另一回事。 甚至您的用户也可能希望在运行速度上损失不大甚至不明显,以换取更快地获得功能。 没有一个万能的答案:在某些情况下,生产力比速度更重要,而在另一些情况下,反之亦然。

    调试的奥秘

    最后还有一个特定方面比调试一个方面更具不确定性:调试。 在纸上,使用解释器的调试比使用编译器的调试容易。 确实有以下几个原因:

    • 使用解释器,可执行文件只有一个版本; 您不需要调试版本进行开发,也不需要最终用户发布的版本
    • 使用解释器的平台特定错误更少
    • 由于解释器可以即时转换代码,因此源代码中的信息仍然可用
    • 由于解释器一次执行一个语句,因此更容易发现错误

    开发工具的不同之处

    尽管在实践中这都是正确的,但这可能没有看起来那么重要。 实际上,如果您考虑一下自己的经验,可能会发现调试JavaScript比调试C ++困难 。 这是为什么? 语言本身的设计部分是。 JavaScript使用动态类型,而C ++使用静态类型。 后者使更容易及早发现错误。 但最终归结为开发工具。 手工编译C ++很困难,因此大多数人都使用IDE进行开发。 另一方面,您可以轻松地使用文本编辑器和命令行工具在JavaScript中进行开发。

    话虽如此,如果我们将它们放在相同的环境中,每个人都拥有出色的IDE和支持工具,情况就会恢复正常。 确实,想要学习如何使用新语言的人们使用了许多解释环境。 通过逐行实时查看发生了什么,更容易测试和发现对与错。

    结论

    我们已经看到了编译器和解释器之间重要的主要区别。 更重要的是,我们已经看到,不同哲学的后果比技术哲学的后果更为重要。 简而言之,有些文化伴随着某些技术选择,而这些选择最终会彼此相关。 如果您想提高速度并简化开发,您将选择所有技术来提高速度,而不仅仅是一种。 您的用户将跟随您的领导。

    这是要考虑的一个关键方面,尤其是如果您要创建自己的编程语言时。 Rasmus Lerdorf创建了易于使用的PHP。 确实,与替代方案相比,至少在创建之时,它的使用极为方便。 但是它起初是从图书馆而不是语言开始的。 尽管它已经有了很大的改进,但它仍然遭受了初期的困扰。 您仍然可以创建良好的PHP代码,但其用户数量比平时少。 因为如果您只需要工作,安全性,维护等方面的功能,那么其​​余所有功能都将在以后提供。

    如果您想知道如何实际地为您的语言构建解释器或编译器,则可能需要看看创建编程语言资源 。 如果您想学习这些知识以及创建自己的语言所需的全部知识,您只需选择一本深受孩子和成人喜爱的好书,介绍如何创建实用的轻量级语言

    翻译自: https://www.javacodegeeks.com/2017/05/difference-compiler-interpreter.html

    展开全文
  • tiny语言编译器源码,为新手学习编译原理提供很大帮助,包括tiny语言编译器和解释器,还有使用说明。
  • 编译器解释器区别和工作原理 这篇教程,我们一起来了解编译器和解释器的工作原理,这对我们提升能力很重要。 我一直认为概念或理论知识是非常重要的,让我们能够将很多模糊的认知关联起来,变得更加清楚,从而...

    编译器与解释器的区别和工作原理

    这篇教程,我们一起来了解编译器和解释器的工作原理,这对我们提升能力很重要。

    我一直认为概念或理论知识是非常重要的,让我们能够将很多模糊的认知关联起来,变得更加清楚,从而打开视野,上升到新的层次。

    但是,一般来说,在刚刚入门的时候,接触一些概念性、理论性的内容,不但非常枯燥,而且难以理解。

    而在一定时间的学习接触之后,再来看这些东西,则会变得更加容易领悟,理解的更透彻。

    这篇教程会包含很多专业术语,我会对其中一些专业术语进行解释,对于一些未做解释的专业术语,建议大家通过搜索引擎进行理解。

    首先,从Python这种编程语言说起。

    它有以下几个特点:

    • 面向对象:在本站的《Python3萌新入门笔记》中有专门的文章,简单来说是指在程序设计中能够采用封装、继承、多态的设计方法。
    • 动态语言:是在运行时可以改变其结构的语言;例如,在程序运行过程中,给一个类的对象添加原本不存在的属性。
    • 动态数据类型:变量不需要指定类型,但需要解释器执行代码时去辨别数据类型;这个特点让编程变得简单,但代码执行效率变低。
    • 高级语言:是指高度封装了的编程语言,相对于机器语言,更加适合人类编写与阅读。
    • 解释型语言:是指无需编译,直接能够将源代码解释为机器语言进行运行的语言。

    从最后一个特点,我们能够看到Python是解释型语言,也就是说源代码需要通过解释器进行解释执行。

    编程语言分为编译型语言和解释型语言,我们需要了解它们的区别,才能够更好的理解编译器和解释器的区别。

    相信大家都知道C和C++。

    这两种语言都是编译型语言。

    编译型语言的特点是执行速度快,缺点是什么呢?

    编译型语言需要编译器处理,主要工作流程如下:

    源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)

    在这个工作流程中,编译器调用预处理器进行相关处理,将源代码进行优化转换(包括清除注释、宏定义、包含文件和条件编译),然后,通过将经过预处理的源代码编译成目标代码(二进制机器语言),再通过调用链接器外加库文件(例如操作系统提供的API),从而形成可执行程序,让机器能够执行。

    在这个工作流程中,目标代码要和机器的CPU架构相匹配,库文件要和操作系统相匹配。

    如果想在不同CPU的机器或者系统上运行C语言的源代码,就需要针对不同的CPU架构和操作系统进行编译,这样才能够在机器上运行程序。

    所以,编译型语言的缺点我们就看到了,它不适合跨平台。

    而且,到这里大家应该能知道,为什么CPU一样,但是exe程序只能Windows中运行,而不能在Mac中运行了。

    如果上面感觉不太好理解,我举一个贴近生活的例子:

    一名会多国语言的老师教了很多外国学生,这些学生分别来自有英国、美国、法国、德国、韩国。

    当这名老师给这些学生发放学习资料的时候,都需要把中文资料先进行翻译,变成英文版、德文版、法文版和韩文版的电子文档,再分别发给每个国家的学生去学习。

    这个翻译的工作非常繁琐。

    不仅,要翻译成每个国家的语言,而且,还要考虑英式英语和美式英语的区别分别翻译成不同的英文版。

    再有,就是每次资料更新还都要重新翻译一遍。

    在上面的例子中,中国老师就像是编译型语言的开发人员,中文资料就是编译型语言的源代码,翻译后的资料就是不同CPU架构的机器语言,不同语言的学生就是不同CPU架构的机器,美国和英国的学生,就是CPU架构相同但操作系统不同的机器。

    注意:这里涉及到跨平台的概念,平台可以理解为不同CPU架构(例如X86、ARM等)的机器和同种CPU但不同的操作系统(例如Unix、Windows等)的机器。

    提示:建议大家阅读上述内容时,了解一下预处理器、链接器、库文件(静态链接库和动态链接库)的相关概念。

    我们继续看刚才的例子。

    这位累得要死的中国老师,开始想办法。

    他想,我干嘛自己去翻译,给他们一人一个自动翻译软件不就好了?

    于是,老师就给每个学生定制了一个自动翻译软件,这个软件能够一页一页的原始中文资料翻译成不同的语言资料给学生看。

    现在的情况,这名老师工作会轻松很多,不需要再考虑制作各种语言版本的资料,只需要把精力放在制作中文资料就好了。

    早期的解释器就是这样的工作流程:源代码 (source code) → 解释器 (interpreter) 。

    源代码无需预先编译成可执行程序。

    在程序执行时,解释器读取一句源代码之后,先进行词法分析和语法分析,再将源代码转换为解释器能够执行的中间代码(字节码),最后,由解释器将中间代码解释为可执行的机器指令。

    所以,编译型语言的可执行程序产生的是直接执行机器指令,而解释型语言的每一句源代码都要经过解释器解释为可以执行的机器指令,相比之下解释型语言的执行效率会低一些。

    但是,解释型语言在不同的平台有不同的解释器,源代码跨平台的目的实现了,开发人员不用再考虑每个平台如何去编译,只需要关注代码的编写,编写完的代码在任何平台都能无需修改(或少量修改)就能正确执行。

    例如,Linux系统中执行Python源代码时支持 fork()函数,而window系统中不支持这个函数,如果将运行在Linux系统中的源代码移植到Windows系统,这时就需要进行修改。

    理解了编译型语言和解释型语言的区别,我们继续看例子。

    老师虽然给学生定制了翻译软件,但是发现这个软件翻译每页内容都很慢,究其原因,这个软件需要先把每页内容分析一遍,将内涵复杂的中文(例如成语)转换成简单直接能够直接进行翻译的中文,再进行向其它国家语言的翻译。

    看到这个问题之后,软件的提供商想出了一个解决方案。

    这个方案就是:第一次打开资料时,让翻译软件把原始资料完整的进行分析转换,保存成一个能够直接翻译的中间文件;然后,翻译程序再一页一页的读取转换后的中间文件去翻译;这样的话,虽然第一次打开时慢了些,但是,当学生再次打开资料时,只要原始资料没有更新,就直接通过保存的中间文件进行翻译,速度会有很大提升。当然,程序打开时,需要对比一下原始资料是否和中间文件一致,如果有修改,则再次编译出新的中间文件,覆盖旧的中间文件。

    Python程序运行时,就像上面的例子一样,先将源代码完整的进行转换,编译成更有效率的字节码,保存成后缀为“.pyc”的字节码文件,然后,翻译器再通过这个文件一句一句的翻译为机器语言去执行。

    注意:Shell中执行源代码时不会生成中间文件,每次都是读取源代码,转化为字节码后,解释执行。

    上面的例子还没结束。

    软件供应商提出的方案虽然解决了一些效率问题,但是还无法完全让人满意。

    经过苦思冥想,软件供应商又想出了一个新的方案。

    在原始资料中有很多重复的内容;

    这些重复的内容如果翻译一次之后,就把它保存,再碰到相同的内容就直接使用保存的翻译结果。

    而没有必要每次都再翻译。

    长时间运行程序时,速度就会快上很多。

    这个例子实际上就是JIT即时编译器(Just-In-Time Compiler)的比喻。

    无论是使用解释器进行解释执行,还是使用编译器进行编译后执行,最终源代码都需要被转换为对应平台的本地机器指令。

    那么,一些重复出现的代码,就可以将其编译为本地机器指令,重复使用,从而提高效率。

    这些重复出现的代码包括多次调用的方法和多次执行的循环体。

    JIT即时编译器比较典型的例子是在JVM(Java虚拟机)中。

    Java程序最初是通过解释器进行解释执行的,当Java虚拟机发现某个方法或代码块运行特别频繁的时候,就会认为这是“热点代码”(Hot Spot Code)。JIT即时编译器会将这些“热点代码”编译成与本地机器相关的机器指令,进行各个层次的优化。

    当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行。在程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地机器指令之后,可以获取更高的执行效率。当程序运行环境中内存资源限制较大,可以使用解释器执行节约内存,反之可以使用编译执行来提升效率。

    大家都知道,Java程序的运行性能很高,基本上可以和C/C++的程序相媲美。这主要是因为JIT即时编译器可以针对那些频繁被调用的“热点代码”做出深度优化,而静态编译器无法完全推断出哪些是运行时的热点代码,而不能做出针对性的优化。因此,通过JIT即时编译器编译的本地机器指令才会比直接生成的本地机器指令拥有更高的执行效率。

    Python有多种解释器,比较著名的有CPython、IPython、PyPy、Jython和IronPython等。

    其中CPython是Python官方默认的解释器,它是用C语言实现Pyhon解释器。

    CPython是单纯的解释器,将源代码转化为字节码之后解释执行。

    而另外一款使用Python实现的Python解释器PyPy,比CPython解释器更加灵活。因为PyPy采用了JIT技术,在程序的运行性能上PyPy将近是CPython解释器执行效率的1至5倍。

    而其它的解释器都各有特点。

    IPython是基于CPython增强了交互。

    Jython是运行在Java平台上的Python解释器。

    IronPython是运行在.Net平台上的Python解释器。

    以上就是对编译器和解释器区别和工作原理的讲述,因为没有找到现成的资料,所以,其中内容参考了很多网上的资料,多番查证后,进行了融合。如果有解释错误,或者讲解不透彻的地方,欢迎大家指正并提出建议。

    展开全文
  • mix mode:表示混合模式,编译器和解释器都有 二、编译器和解释器之间的区别 Java编译器:将Java源文件,也就是.java文件编译成字节码.class文件(二进制字节码文件),java.exe可以简单的看成是Java编译器。...

    一、前言

         随着互联网的发展,现在虚拟机地表最稳定,最强的默认是Hotspot虚拟机。先查看下:

    查看方式:cmd进行黑框框,然后输入:java -version

    会出现以下参数:

    java version:当前java语言运行的JDK版本好

    Java(TM) SE Runtime Environment (build 1.8.0_261-b12):java运行环境

    之前的JVM包含了两种JVM的实现,一种是客户端的,一种是服务端的。现在已经把Client VM忽略掉了

    java HotSpot Server VM:java虚拟机,是服务器端的,是服务器环境中最大程序化的执行速度而设计。

    java HotSpot Client VM:客户端的虚拟机,在客户端环境中减少启动时间而设计。

    mix mode:表示混合模式,编译器和解释器都有

    二、编译器和解释器之间的区别

    Java编译器:将Java源文件,也就是.java文件编译成字节码.class文件(二进制字节码文件),java.exe可以简单的看成是Java编译器。

    Java解释器:就是把java虚拟机上运行的.class字节码解释成机器指令,让CPU识别运行。即jdk和jre中bin目录下的java.exe文件。Java解释器用来解释执行Java编译器编译后的.class文件。java.exe可以简单的看成Java的解释器。

    简单的说:Java解释器是执行Java编译器编译后的程序。Java编程人员在编写完代码后,通过Java编译器将源代码编译成JVM字节代码。任何一台机器主要配备了Java解释器,就可以运行这个程序。Java的解释器只是一个基于虚拟机JVM平台的程序。解释器像是一个中间人,编译器已经把程序文件打包好,解释器只需要在JVM环境下执行就可以了,期间不需要依赖任何的编译器

     

           当程序需要首次启动和执行的时候,解释器可以首次发挥作用,一行一行代码的直接转义执行,但是效率低下。当多次调用方法或者循环体的时候,JIT(即时编译器)就可以发挥作用,把越来越多的代码编译成本地机器码,之后可以获得更高的效率。

           JIT是即时编译器 – 在执行本机之前,将给定的字节码指令序列编译为运行时的机器码。以方法为单位,一次性的将整个方法的字节码编译成本地机器码,机器码供CPU运行。它的主要目的是在性能上做大量的优化。

           JVM负责运行字节码:JVM把每一条要执行的字节码交给解释器,翻译成对应的机器码,然后由解释器执行。JVM解释执行字节码文件就是JVM操作Java解释器进行解释执行字节码文件的过程

           JVM是一种能够运行Java字节码(Java bytecode)的虚拟机。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 首先解释一下概念, 解释:输入程序代码–>得到结果。一步到位 ...热点代码会被jit编译编译成本地代码,直接操作系统cpu交互执行,不需要经过解释器去执行了。效率大大的提高。但是如果全部交给j
  • 这篇教程,我们一起来了解编译器和解释器的工作原理,这对我们提升能力很重要。我一直认为概念或理论知识是非常重要的,让我们能够将很多模糊的认知关联起来,变得更加清楚,从而打开视野,上升到新的层次。但是,...
  • 理解编译器和解释器

    2021-01-06 23:13:55
    编译器有两种类型,一种是仍然叫编译器,一种是解释器。翻译的方式有两种,一种就叫做编译,另一种叫做解释。使用编译器编译的语言成为编译性语言,使用解释器解释的语言称为解释性语言。 1.编译性语言:例如...
  • 编译器解释器区别

    千次阅读 2019-04-23 21:22:54
    奶牛 = 各种CPU(不要告诉我IntelAMD哦),比如x86,ARM,MIPS等等 那你应该知道了为什么奶牛会有吃不同形状牧草的嗜好了,这个奇怪的比喻是为了表示不同的CPU接受的不同的机器语言。 对应上面的奶牛图,编译器...
  • 编译器和解释器区别

    2018-10-10 11:08:40
    解释器和编译器过程:  解释器和编译器读入源语言后,解释器和编译器都要进行词法分析、语法分析语义分析,之后,二者开始有所分别。解释器在语义分析后选择了直接执行语句;编译器在语义分析后选择将将语义存储...
  •  菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。  高手说: “  解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性语言。   编译器是把源代码整个编译成...
  • 在初步学习编译原理时,遇到了一些不能很直观理解的概念,以下是我结合书本网上学习的一些见解。 编译器:在一个程序...执行时不在需要编译器,直接在支持目标代码的平台上运行,这样执行效率比解释执行快很多...
  • RPN 编译器和解释器 用于教学目的的简单 RPN 编译器和解释器。 概述 该项目是为在 Cerner DevCon 演讲中使用而开发的。 该项目的基本目标是演示使用纯函数风格构建一个简单的编译器。 除了接受表达式作为输入的 I/O ...
  • java中的编译器和解释器 Java中引入了虚拟机的概念,即在机器编译程序之间加入了一层抽象的虚拟机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够...
  • 关于编译器和解释器

    万次阅读 多人点赞 2018-05-22 11:06:56
    什么是编译器 摘自 Wiki Compiler 一段 A compiler is a computer program (or a set of programs) that transforms source code written in a programming language (the source language) into another ...
  • 反编译工具,适用于c#语言的动态链接库dll反编译
  • jave decompiler using method pdf
  • 看到一篇讲编译器和解释器区别的,挺形象,故转载以记。
  • 编译器和解释器 Before the Java and C# programming languages appeared, computer programs were only compiled or interpreted. Languages like Assembly Language, C, C++, Fortran, Pascal were almost always ...
  • 超赞!编译器和解释器的异同,瞬间明白了

    万次阅读 多人点赞 2017-11-28 22:34:15
    菜鸟经常将编译器和解释器弄混淆,无奈之下,于是向高手请教。  高手说: “  解释器是一条一条的解释执行源语言。比如php,postscritp,javascript就是典型的解释性语言。   编译器是把源代码整个编译...
  • Java编译器和解释器

    2021-02-26 17:13:47
    Java编译器:将Java源文件(.java文件)编译成字节码文件(.class文件,是特殊的二进制文件,二进制字节码文件),这种字节...Java解释器用来解释执行Java编译器编译后的程序。java.exe可以简单看成是Java解释器。 ...
  • 我更倾向于周志明对编译器的"分类"的看法,编译过程中有三类比较有有代表性的编译器: 前端编译器:Sun的javac,Eclipse的增量编译器EJC。把*.java编译为*.class JIT编译器:Hotsport VM的c1,c2编译器把字节码编译为...
  • python编译器和解释器区别是什么发布时间:2020-09-09 13:53:59来源:亿速云阅读:109作者:小新小编给大家分享一下python编译器和解释器区别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考...
  • ir sensor file for detecting objects through controller
  • “编译”解释”的确都有“翻译”的意思,它们的区别则在于翻译的时机安排不大一样。编译型:事先一次把所有的代码转换成 机器语言,然后写成可执行文件;而解释型:在程序运行的前一刻,还只有源程序而没有可...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 204,257
精华内容 81,702
关键字:

编译器和解释器的区别