Java和JVM运行原理

编译型语言和解释型语言

编译型语言:专门的编译器,针对特定的操作系统翻译成机器码,并包装成该操作系统可执行程序的格式。
优点:执行速度快、效率高
缺点:依赖编译器、跨平台性差
代表语言:C、C++、Delphi、Pascal、Fortran

解释型语言:在运行程序的时候进行翻译,专门的解释器负责在每个语句执行的时候解释程序代码。
优点:依赖解释器、跨平台性强
缺点:执行速度慢、效率低
代表语言:Java、Basic

Java程序编译原理

Java语言可以说是一种编译型-解释型语言,但这里的所谓的“编译”与传统的编译是不同的。Java程序很特殊,它也需要编译,但是没有直接编译成机器语言,而是将.java文件编译成与平台无关的字节码.class文件,class类文件不能在计算机上直接执行,它需要被Java虚拟机(JVM)翻译成本地的机器码后才能执行,而Java虚拟机(JVM)的翻译过程则是解释型的。

java字节码首先被加载至计算机内存中,然后读出一条指令,翻译一条指令,执行一条指令,该过程被称为java语言的解释执行。该过程是由java虚拟机完成的。我们可通过两条重要的命令javac XXX.javajava XXX来分别完成上面的编译和解释过程。

javac XXX.java:将后缀名为.java的源文件编译为后缀名为.class的可以运行于Java虚拟机的字节码。

java XXX:解释前面生成的字节码,生成本地的机器码。

具体编译过程如下:

Java虚拟机(JVM)

JVM是java的核心和基础,是一种能够运行java字节码的虚拟机。JVM屏蔽了与具体操作平台相关的信息,使得Java程序只需要生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

JVM执行程序的过程:

  • 加载.class文件
  • 管理并分配内存
  • 执行垃圾收集