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++ c++ java 语言与工具 性能比较

Robert C. Martin的中文博库贴了一篇文章:三大编程语言的性能PK--Java, C/C++和Ruby。里面说Java比C++快一些,引来粉丝们攻击。印象中Java应该只在某些特定的情况下...
  • kevinhalu
  • kevinhalu
  • 2006年08月31日 13:48
  • 849

各种计算机语言的经典书籍(C/C++/Java/C#/VC/VB等)

1、JavaJava编程语言(第三版)—Java四大名著—-James Gosling(Java之父)Java编程思想(第2版)—-Java四大名著—-Bruce EckelJava编程思想(第3版)...
  • qq_26525215
  • qq_26525215
  • 2016年04月19日 17:11
  • 1564

编译型语言、解释型语言、脚本语言的区别

计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。把高级语言翻译成机器语言的两种方式:一种是编译,一种是解释。两种方式只是翻译的时...
  • u011026329
  • u011026329
  • 2016年04月11日 10:11
  • 4691

编译型语言、解释型语言与脚本语言三大类型详解

在学习各种高级编程语言的过程中,我们总会遇到一些语言类型的名词,理解这些名词对我们理解高级语言的运行机制有很大帮助! 一、编译型语言 定义:指用专用的编译器,针对特定的操作平台(操作系统)将某种高...
  • zhangliangzi
  • zhangliangzi
  • 2015年12月27日 19:52
  • 7071

Java替代C语言的可能性

    前不久CSDN刊登了一篇《C语言已经死了》的文章,引起了一些争论。其实那篇文章是从Ed Burnette的博客上转载来的,原文题目是“Die, C, die!”,直译过来应该是《去死吧,C!》...
  • myan
  • myan
  • 2007年01月14日 10:40
  • 61594

实现Java与C语言接口

第一步:声明本地变量 例如:class NativeHello{ public native void nativeHelloWorld(); static{ System.loodlibrary...
  • naive1010
  • naive1010
  • 2004年11月23日 08:45
  • 1688

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

一:各种语言 二:总结 (1)编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。 (2)解释型语言,是在运行的时候将程序翻译成机器语言,...
  • lixingying567
  • lixingying567
  • 2015年04月02日 18:36
  • 2578

我所理解的Java到底是解释型语言还是编译型语言

关于Java到底是解释型语言还是编译型语言还是二者的集合?首先理解一下何为解释型语言和编译型语言     计算机高级语言类型主要有编译型和解释型两种:     编译型语言:在程序运行之前,有一个单...
  • gaosure
  • gaosure
  • 2017年02月27日 20:55
  • 2224

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

c#,java这类解释型的语言永远也比不上c/c++的编译型语言. 特别是在将来64位计算机中. 我看过byte code的定义,虚拟机非常像以前所说的Pcode机. 所有的虚拟机只有一个算术/逻辑运...
  • asusharp
  • asusharp
  • 2004年08月27日 13:07
  • 1530

c语言和java的区别

今晚读了一下c程序设计语言,这是一本经典书籍,发现C语言和java有很多是相同的,毕竟java是由c语言进化来的。我大概从我自己的思考来谈谈不同点1.c语言是面向过程,主要单位是函数,变量和函数的耦合...
  • u010321471
  • u010321471
  • 2015年10月10日 10:11
  • 5037
收藏助手
不良信息举报
您举报文章:c#,java这类解释型的语言永远也比不上c/c++的编译型语言.
举报原因:
原因补充:

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