仅从性能上分析 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++,未来如何,还有看各自编译器的发展。
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++,未来如何,还有看各自编译器的发展。
相关文章推荐
- c++中类似于java jprofiler/eclispe memoryanalysis的性能以及内存分析工具
- 排序算法的C++实现与性能分析(插入排序、归并排序、快速排序、STOOGE排序、堆排序)
- 透析Java本质-集合类的使用及性能分析
- google开源的C++性能分析工具 - gperftools
- Java application 性能分析分享
- C++ 语言特性的性能分析
- Java应用常用性能分析工具
- JAVA LinkedList和ArrayList的使用及性能分析
- StopWatch 监控Java代码运行时间和分析性能
- Java I/O API之性能分析 (上)
- Java性能分析神器-JProfiler
- Java性能分析工具Profiler性能分析方法:离线剖析和触发器
- Java性能分析工具之Jprofiler初体验
- java性能分析工具之JVisualvm
- java List遍历的性能分析
- Android开发之Java集合类性能分析
- Java之学习笔记(11)------------算法性能分析
- Java:集合类性能分析 推荐
- 文《关于c++与java中文乱码问题分析与解决》中一个bug分析
- JAVA程序性能分析及调优浅析