您的位置:首页 > 编程语言 > C语言/C++

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

2014-03-05 20:14 316 查看
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++,未来如何,还有看各自编译器的发展。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: