JAVA 和 C++ 运行机制比较

| 分类 Java  | 标签 Java 

今天看书时无意间翻到了第一章中关于java程序是怎样运行的:

  • 编写xx.java源文件
  • javac编译器编译xx.java生成xx.class字节码文件
  • java虚拟机解释xx.class中字节码后运行

接着下面的部分说道java是一个跨平台运行的语言,一次编译,到处运行。然后回忆了一下C++程序的运行过程:

  • 编写xx.cc(xx.cpp)源文件
  • g++编译器编译xx.cc文件生成二进制机器码文件
  • 运行二进制机器码文件

通过比对我们发现,java比C++多了一步java虚拟机解释。而这恰恰就是C++是平台相关,而java是平台无关的关键。接下来就深入分析一下:

###一、语言类型

  • JAVA——编译和解释型语言:一个JAVA文件,首先会由JAVA编译器编译成class字节码文件,然后由Java虚拟机(JVM)去解释运行。不同的操作系统只要装有适合不同平台的JDK,JAVA文件都可以被解释运行。JAVA是一种编译和解释型语言。而字节码文件(xx.class)之所以能够被JAVA虚拟机(JVM)所解释,最主要的原因就是字节码文件(xx.class)里面所包含的内容是可以被JAVA虚拟机(JVM)所解释的一种高度优化指令。
  • C++——编译型语言:C++没有虚拟机这种概念,也就是说C++一旦编译就可以运行,是一种编译型语言。它速度上比JAVA快得多,C++编译完成后是机器码(二进制文件)可以直接在操作系统上运行,由此注定它跟平台相关。

所以,JAVA文件只需要编译一次就可以在不同的操作系统上解释运行,这就是JAVA可以跨平台的原因。

###二、运行速度

从这个方面来说的话,C++是最快的。因为C++编译后成为机器码可以直接运行,但是JAVA编译完后需要JVM解释。

###三、编译效率

从这个方面来说的话,C++编译后的机器码并不是每个操作系统通用的,如果换到其他操作系统上就需要再次编译。所以这个时候JAVA虚拟机(JVM)的优势就体现出来了,JAVA的字节码文件一次编译处处运行,换个操作系统仍然无需再次编译。所以,从编译效率来说,JAVA是最高的。

###四、安全角度

这个暂时还没有过多的感受,只是凭书本和一些观点知道:JAVA由于GC机制的自动化,大幅度降低了C++存在的内存问题。不过,C++肯定也在改进,boost库中就有智能指针的使用。所以,关于安全的问题还是等有了足够的经验再说吧。

###五、个人总结

  • C++因为是编译后得到机器相关的二进制机器码文件,所以它跟平台相关
  • JAVA由于虚拟机的存在,使得编译后的xx.class文件可以在所有装有JDK的平台上运行,所以它跟平台无关(本质就是JVM完成了平台相关的处理工作)

上一篇     下一篇