c#,java这类解释型的语言永远也比不上c/c++的编译型语言.

原创 2004年08月27日 13:07:00
c#,java这类解释型的语言永远也比不上c/c++的编译型语言.
特别是在将来64位计算机中.
我看过byte code的定义,虚拟机非常像以前所说的Pcode机.
所有的虚拟机只有一个算术/逻辑运算器,也就是说在两个操作数的情况下,
必须先将两个操作数压栈,然后进行计算后再存放到算术/逻辑运算器中,
或者也可能将结果存放到堆栈中.
例如,你要计算A+B+C的值,
虚拟机一般如此定义操作
Push A (将A压栈)
Push B (将B压栈)
Add (将堆栈里的两数相加到算术/逻辑运算器中, 假设为RegA)
push RegA (将结果再压入堆栈,以便进行下一步计算)
push C
Add (将结果与C相加)

由此看出虚拟机也被称作是stack computer

而不是像c/C++那样产生的间接代码
load reg1, A
load reg2, B
add regA, reg1, reg2
load reg3, c
add regA, regA, reg3
由此看出c/c++编译产生的代码跟接近实际计算机, 因为实际的计算机
是register computer.

上面的操作看似语句数相等,但执行速度相差很大
虚拟机中的ADD,是要从内存(堆栈)中取出两个数, 而c/c++产生的代码
add rega, reg1, reg2却是直接寄存器操作.
我们知道,寄存器是在CPU中的,他的访问速度比内存访问速度快好几个数量级,
尽管现在出现片内的cache,但其速度还是会慢,而且有时cache内的数据可能
被切换到内存中.

Intel新推出的64位itanium中就有几百个cpu片内寄存器, 如果使用专门为这种
cpu设计的c/c++编译器,产生的代码将有大部分操作在寄存器中,其执行速度大大提高.

既然register computer这么好为何不在虚拟机中使用呢?
其原因不言自明, 为了跨平台(跨CPU)! 在实际生活中, 大部分的服务器的芯片都是
register computer型的(如Intel, AMD, PowerPC), 而大多数嵌入式芯片都是stack
computer型的, 因为嵌入型的cpu应尽量设计的小, stack computer由于片内只有一个
寄存器则使CPU较小.


在编译原理的代码优化理论中有一类被称作寄存器分配的算法,(当然有许多实际算法)
其基本想法是先设定一定的寄存器数量, 然后在变量分配时尽量分配给寄存器.如果寄
存器数不够才分配给内存.但这些算法(基于过程,着色图法)都相当复杂.所以在java和
c#中均未采用.
因此严格地说, 在某些嵌入式计算机中java程序可能运行在与c/c++相同的数量级上.
但在服务器中(特别是将来拥有大量寄存器的64位计算机中), 其运行效率可能相差好
几个数量级(特别是在运算密集型应用中).

编译型语言与解释型语言的区别及各自的优缺点

编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言就不用再进行翻译了。 解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编C/C++ 等都是编译型语言,而Java...
  • GIRLDWH0715
  • GIRLDWH0715
  • 2017年04月18日 15:19
  • 2011

解释型语言和编译型语言的区别

解释型语言和编译型语言的区别 首先,我们编程都是用的高级语言(写汇编和机器语言的大牛们除外),计算机不能直接理解高级语言,只能理解和运行机器语言,所以必须要把高级语言翻译成机器语言,计算机才能运行高级...
  • u012875880
  • u012875880
  • 2013年11月24日 17:58
  • 19020

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

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

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

最近各大互联网公司线上笔试,编程题目里的编译器只支持C/C++、Java,甚至有的支持javaScrpit和Pascal,就是不支持Python。让一直以来用惯了Python的我直吐血,于是今天痛定思...
  • qq_38880380
  • qq_38880380
  • 2017年10月24日 10:34
  • 147

《疯狂Java讲义》——解释型语言和编译型语言

高级语言是较接近自然语言的一类语言,机器语言是可以直接被计算机识别的语言。高级语言要被计算机识别,则必须先“翻译”成机器语言。而这个“翻译”的方法粗分的话有两种: 通过编译来实现:编译器将高级语言从...
  • ziminghuohua
  • ziminghuohua
  • 2016年05月29日 20:32
  • 191

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

有人说Java是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就无法执行。 也有人说Java是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型...
  • mmc_maodun
  • mmc_maodun
  • 2013年05月02日 21:23
  • 4682

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

有人说Java是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就无法执行。 也有人说Java是解释型的。因为java代码编译后不能直接运行,它是解释运行在JVM上的,所以它是解释型...
  • Goluck98
  • Goluck98
  • 2015年01月18日 11:16
  • 938

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

转自:http://blog.csdn.net/xxb2008/article/details/7924676 JAVA是解释型语言还是编译型语言 Under J2SE | 三月 10th...
  • KUAILE123
  • KUAILE123
  • 2014年03月19日 14:42
  • 705

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

JAVA是解释型语言还是编译型语言 Under J2SE | 三月 10th, 2010 1 comment   JAVA是解释型语言还是编译型语言 概念: 编译型语言...
  • gundongdexueqiu
  • gundongdexueqiu
  • 2011年12月08日 10:38
  • 1790

Java到底是编译型语言还是解释型语言?

转载自:点击打开链接 Java这个语言很非凡。  一、你可以说它是编译型的。因为所有的Java代码都是要编译的,.java不经过编译就什么用都没有。  二、你可以说它是解释型的。因为java代码...
  • qzc70919700
  • qzc70919700
  • 2017年05月19日 09:05
  • 234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#,java这类解释型的语言永远也比不上c/c++的编译型语言.
举报原因:
原因补充:

(最多只允许输入30个字)