关闭

Java、Python分别是解释型还是编译型语言?

2605人阅读 评论(0) 收藏 举报
分类:

python  解释型(函数写在调用前)

java   编译型(请求次数多)+解释型(请求次数少)

解释性语言定义:

程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就需要逐行翻译一次,效率比较低。

现代解释性语言通常把源程序编译成中间代码,然后用解释器把中间代码一条条翻译成目标机器代码,一条条执行。

编译性语言定义:

编译性语言写的程序在被执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。


Python工作过程:

python 是解释型的编程语言。也可以把python脚本编译成pyc文件,不然编译后也是一种python虚拟指令,在python中运行。

Python先把代码编译成字节码,在对字节码解释执行。字节码在python虚拟机程序里对应的是PyCodeObject对象,pyc文件是字节码在磁盘上的表现形式。

pyc的创建时机是模块加载的时候,即import。

python test.py会对test.py进行编译成字节码并解释执行,但是不会生成test.pyc。

Java工作过程:

JAVA的第一道工序是javac编译,当然目标文件是BYTECODE(字节码)。后续可能有三种处理方式:

1. 运行时,BYTECODE由JVM逐条解释执行;

2. 运行时,部分代码可能由JIT翻译为目标机器指令(以method为翻译单位,还会保存起来,第二次执行就不用翻译了)直接执行;

3. RTSJ。继JAVAC之后执行AOT二次编译,生成静态的目标平台代码(典型的就是IBM WEBSHPERE REAL TIME)。

其实,现在用编译型、解释型来分类编程语言已经有点力不从心了。总体来讲,java的编译结果是被jvm“解释执行”的,所以这么说也能说通,而其实这个“是编译还是解释”这个概念在这里已经有点模糊了,理解它的过程就行了,不必下一个“精确”的定义;

而我自己仍然赞成“java是编译型语言”的说法,因为“编译”其本质就是“把一个相对高级的语言转换为另一个相对低级的语言”


字节码和机器码:

字节码和机器码(或者native code)的区别:

C代码被编译成机器码,将在处理器上直接执行。每一条指令控制CPU工作。

Java代码被编译成字节码,将在Java虚拟机(JVM)这个抽象的计算机上执行。每一条指令由JVM处理,JVM同计算机本身之间交互。

简而言之:机器码快的多,但字节码更易迁移,也更安全。


Java-JIT

大家都知道本地机器码的速度比字节码的速度快很多。那么,如果我们能将一些字节码直接编译成本地机器码再去运行它会怎样呢?我们必须花费一些代价(比如时间)在编译字节码到本地机器码上,如果最终的运行时间更快,那么这个代价就是值得的。这就是JIT编译器的动机,一种混合了解释器和编译器好处的技术。简单来讲,JIT就是想通过编译技术提升脚本解释器系统的速度。

例如, 被JIT(及时编译)采用的通用方法:标识被经常执行的字节码;把其编译成本地的机器码;缓存该结果;当同样的的字节码再次被执行的时候,会取预编译的机器码,得到好处(例如速度提升)。

PyPy

把JIT代入Python语言 (参看前面成果的附录).当然也有其他目的: PyPy 目标是成为一个跨平台,轻内存,支持stackless(译注:stackless为python提供微线程扩展,具有并发特性)。 但是及时编译才是它真正的卖点。 基于一系列时间测试的平均, 据说性能上能提高6.27倍。


3
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

Python 解释型语言

解释型语言,内存管理由解释器负责。 由于不是以本地机器码运行,执行相对慢。然而类似Java,Python实际是字节编译,可以生成近似机器语言的中间形式。    何为字节编译?解释器与编译器的区别?Ja...
  • ck404
  • ck404
  • 2014-03-07 10:54
  • 1761

python学习(解释型语言)

python 安装下载:https://www.python.org/ * 注释:python注释以#开头 * 变量:变量名必须是大小写英文、数字和下划线的组合,且不能以数字开头     1、动...
  • m0_37524661
  • m0_37524661
  • 2017-04-21 08:58
  • 205

Python程序的执行过程 解释型语言和编译型语言

转载地址:http://www.cnblogs.com/kym/archive/2012/05/14/2498728.html 1、C++和C都是属于编译型语言,本来的.c文件都是用高级语言编写的,...
  • lujiandong1
  • lujiandong1
  • 2015-11-27 11:30
  • 2193

python之解释性语言

目前,常用的解释性语言有 Perl,Python, Lisp/Scheme,Ruby等,究竟什么是解释性语言呢? 所谓的解释性语言主要包括两个方面:以使他们都有自己的解释器,也可以通俗的理解为翻译器...
  • dxeicho
  • dxeicho
  • 2012-08-14 15:02
  • 2452

为什么有这么多 Python?Python是解释型的还是编译型的?

为什么有这么多 Python? 您的评价:        收藏该经验     阅读目录 Pytho...
  • pfm685757
  • pfm685757
  • 2015-05-14 09:21
  • 4571

JAVA是解释型语言还是编译型语言

JAVA是解释型语言还是编译型语言 Under J2SE | 三月 10th, 2010 1 comment   JAVA是解释型语言还是编译型语言 概念: 编译型语言...
  • xxb2008
  • xxb2008
  • 2012-08-30 12:20
  • 20420

Java、Python分别是解释型还是编译型语言?

python  解释型(函数写在调用前) java   编译型(请求次数多)+解释型(请求次数少) 解释性语言定义: 程序不需要编译,在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语...
  • ztf312
  • ztf312
  • 2017-01-03 18:28
  • 2605

Python程序的执行过程 解释型语言和编译型语言

转载地址:http://www.cnblogs.com/kym/archive/2012/05/14/2498728.html 1、C++和C都是属于编译型语言,本来的.c文件都是用高级语言编写的,...
  • lujiandong1
  • lujiandong1
  • 2015-11-27 11:30
  • 2193

Python 解释型语言

解释型语言,内存管理由解释器负责。 由于不是以本地机器码运行,执行相对慢。然而类似Java,Python实际是字节编译,可以生成近似机器语言的中间形式。    何为字节编译?解释器与编译器的区别?Ja...
  • ck404
  • ck404
  • 2014-03-07 10:54
  • 1761

C/C++、Java、Python谁是编译型语言,谁是解释型语言?

最近各大互联网公司线上笔试,编程题目里的编译器只支持C/C++、Java,甚至有的支持javaScrpit和Pascal,就是不支持Python。让一直以来用惯了Python的我直吐血,于是今天痛定思...
  • qq_38880380
  • qq_38880380
  • 2017-10-24 10:34
  • 145
    个人资料
    • 访问:608675次
    • 积分:8333
    • 等级:
    • 排名:第2799名
    • 原创:281篇
    • 转载:95篇
    • 译文:19篇
    • 评论:132条
    博客专栏