仅从性能上分析 java到底和C /C++ 差在了那里

C /C++程序是需要 编译------链接------运行的过程的。

Java 有前端编译,.class文件的加载相当于链接(动态链接,动态运行中的 动态链接),

java程序的运行过程,实际包含了C/C++程序的编译过程的一部分(字节码相当于C/C++经过一定编译的后形成的代码),和运行过程

 

Java的编译分为把*.java 编译为 *.class 的过程 ,常用的编译器有 javac 和Eclipse的ECJ

和把 *.class 编译成机器码的过程如HotSpot VM。

 

虚拟机设计团队对Javac 这类编译器对代码的运行效率几乎没有做优化,而是将对性能的优化集中到了后端的运行期编译,即把 *.class编译成机器码的过程。

 

C /C++ 运行时,运行的是与平台相关的机器码,这些机器码本身就可以在机器上运行,因此运行较快。

而Java运行时,运行的是平台无关的字节码,这些字节码本身并不可以在机器上运行,需要经过再一次的编译才能运行。

也就是java程序的运行过程,实际包含了C/C++程序的编译过程的一部分(字节码相当于C/C++经过一定编译的后形成的代码),和运行过程

这样看的话java当然要比C /C++慢。

 

即时编译器: 当虚拟机发现某个方法或者代码块运行的特别频繁时,就会把这一块代码编译成与本地平台相关的机器码,并进行各层次的优化。

 

一方面a)即时编译占用的是用户程序运行的时间,优化编译的时间成本被加在了运行时间中;b)java本身是面向接口的动态语言,这些又增加了编译的难度;因此直接来看java在性能方面不可能优于静态编译的C /C++

另一方面,java的即时编译可以运用一些,以运行期性能监控为基础的优化措施,如调用频率预测,分支频率预测和剪裁未被选择的分支等等。这些措施又可以是java在性能超出C /C++

综上所述,即时编译器性能的好坏、代码优化程度的高低是java程序运行快慢的决定因素,是衡量一款虚拟机的最关键指标。

目前java语言的速度只是稍慢于C /C++,未来如何,还有看各自编译器的发展。

 

 

你可能感兴趣的:(仅从性能上分析 java到底和C /C++ 差在了那里)