在我的《JRE、JVM和JDK》这篇博文当中,已经理解了为什么java要有jvm,是为了实现跨平台,把代码编译成字节码这种中间代码,再通过jvm实现在不同的机器上根据不同的API编译成不同的实现代码,进而实现跨平台。而jvm那部分的工作对于C或C++都需要自己去做的。

   那为什么C++也不通过一个类似的虚拟机来实现跨平台呢?

   操作系统就是用C/C++写的。C/C++能够直接调用系统接口。Java为什么要JVM才能跑吗?因为他不能直接调用系统接口。所以C/C++不需要虚拟机。但是因为操作系统的不同,接口调用方式不同。所以C/C++不能跨平台。

   C和C++没有虚拟机。他们是直接由编译器编译成汇编语言,再汇编成机器语言进行执行,由于C和C++没有虚拟机所以在在不同的系统环境下需要经过细节上的改变来适应不同机器上的编译器。而java在不同的平台上是不需要改变的,甚至不需要再次编译,因为虚拟机将平台上的差异处理掉了。