最近在复习一些Java的基础知识,突然回想起了这个远古问题,就是基本上所有的人都在说Java比C++的运行速度慢很多很多,而这些人可能有绝大部分人也并不是很清楚其中的原因,今天就来整理一下。
首先JAVA是一种解释型语言,也就是说JAVA并不能直接被编译连接成机器语言执行,而是被编译成二进制的.class字节码文件,再由java虚拟机解释执行,这中间就有了字节码加载的开销,和解释字节码的时间开销。一般来说,java的速度要比c慢10-30倍。 但是这并不是Java的一种缺陷,相反,正式因为有了二进制的字节码和虚拟机,才能让Java实现了跨平台的特性。相同的字节码在不同的操作系统当中只需要由java虚拟机进行解释便能执行。
其次,因为java是一种动态的高级语言,并且拥有Java虚拟机这个强大的工具,所以Java牺牲了一部分性能换来了简单性和安全性。例如Java无需手动GC,也不需要程序员去关心数组越界等问题,而是由Java虚拟机在运行时动态监测溢出情况,并且由Java虚拟机在合适的时间进行GC。并且Java在运行过程当中还会监测引用的情况,防止空指针异常等非正常现象;还需要在运行时进行类型的监测,如果类型不正确也会抛出ClassCastException的异常等。正是这些方便的功能,牺牲掉了一些Java的性能。但这也是Java能够被大多数程序员接受并且广泛流行的原因。