那为什么说Java比C/C++运行效率上要慢呢?且听偶说:
1、Java是解释型语言、C/C++是编译型语言:
C++可以理解为是C语言的升级扩展版本,C/C++的程序编译出来的是机器码,可以被CPU直接加载执行的;而Java编译出来的是字节码,然后要通过JIT编译器“翻译”为机器码,然后再被JVM加载执行。Java中间多了个翻译过程。
两种语言的执行过程大概如下:
Java:
程序》编译》字节码》JVM加载处理》机器码》执行C/C++:
程序》静态编译器》机器码》执行
2、Java其实是运行在JVM(虚拟机)上的:
Java的跨平台其实靠的就是与系统无关的字节码与JVM来实现的,JVM可以理解为是一个虚拟机系统,Java程序是跑在JVM上面的(JVM底层是用C实现的)。所以Java的性能还受JVM的配置影响。
而C/C++编译的程序是不需要跑在虚拟机上的。
3、Java语言特性带来的性能开销:
Java采用的是动态链接、C/C++采用的是静态链接,所以两者性能上差距是有的。
另外JVM还会进行其它一些操作,如:字节码加载、类型检测、GC垃圾回收、类型转换等等,这些操作也是要耗时的。
综上,Java运行效率比C/C++要慢一点,是存在的,但随着JVM及JIT的不断优化,这种速度上的差异只会越来越小。另外,Java是牺牲了部分性能来换取“一次编写、到处运行”的跨平台实现,也是值得的。