前言
想必大家都听说过Java语言具有很高的跨平台能力,那是什么支撑着它呢?答案就是今天的主人公JVM虚拟机,它使得Java程序具有一次编写,到处运行的能力,因为不同的操作系统具有不同的JVM实现,但同一段字节码可以在所有支持JVM实现的操作系统上运行。
正文
那JVM和今天所讲文章的标题有什么联系呢?当然有联系了,我们所写的Java代码就是在JVM虚拟机上运行的,它是JDK(Java开发工具包,是一套完整的开发工具,包括编译器、调试器、运行工具、库文件等,用于开发Java应用程序)的一个组件而已。下面我举非常简单的一段代码例子给大家,如下所示:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
System.out.println("dadad");
}
}
这是我们写好的一段代码,它是以“.java”为后缀的代码文件,比如“HelloWorld.java”,在程序员使用的Eclipse、Intellij IDEA等开发工具中,就有很多类似这样的Java源代码文件。那它是如何在本地环境中运行的呢?上一张图了解一下,如下所示:
当我们点击运行按钮时,JDK就会将我们写好的以后缀名为“.java”的文件编译成字节码文件,该文件后缀名为“.class”,这个过程统称为打包,动动脑筋想一想,我们不可能只编译一个类。接下来就轮到JVM上场了,它是如何执行字节码文件的?首先这里有一个类加载器的概念,它是JVM虚拟机的一个核心组件,它负责将类(.class)字节码文件中的类加载到JVM中去执行,画一张图了解一下,如下所示:
当字节码文件成功被加载到JVM中,JVM就开始基于自己的字节码执行引擎来执行加载到内存里的我们写好的那些类了。举个例子,如上代码所示,该段代码中有一个“main()方法”,JVM就会从这个方法中开始执行代码,它需要哪个类就用类加载器将其加载进来,反正对应的类都在“.class”文件中。最后上一张完整的图给大家,如下所示:
今日小结
今天向大家介绍了JVM虚拟机是执行Java代码的地方,在这一过程中涉及了类加载器的概念,以及JVM执行字节码文件的前置条件,下节课将带大家更深层次的了解类的加载过程,感谢大家的陪伴。