深入理解JVM(一)
前言
作为一个JAVA开发者,不了解Java虚拟机的原理是不行的, 只有了解了基本原理之后,我们才能写出更加高效的代码,同时也有助于我们在 上线的时候排查问题。同时想要进阶学习Java知识,JVM是一个绕不开的问题, 建议有点Java基础的同学,再来看这部分内容会比较容易,我并不是很建议大家在学习Java 初期一上来就学习JVM,当然学习这个事情因人而异,只要自己能学知识到就行了。 Java虚拟机这部分内容,后面应该还会写很多篇,按照我目前的预想, 是按照由简到细的顺序进行介绍的。本篇文章打算先从一个Java程序是如何运行起来的讲起 ,然后介绍加Java虚拟机的整体结构,后面再对其做详细的介绍。
一次编译,随处运行
我们都知道Java对外的宣传口号就是一次编译,随处运行,那到底是如何实现
这一口号的呢?同时我们知道Java是一门跨平台的语言,那它又是如何实现跨平台的呢?相信
通过下面的例子,我们能有一个大致的了解。假如现在我有一个HelloWorld.java
文件,内容如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("hello world!");
}
}
这个例子不用我多说,那它到底是如何通过编译,运行,最终在终端展示出”Hello world”
的呢,请看下图:
Java程序经过一次编译,将Java程序编译成了字节码文件,也就是我们例子中将
HelloWorld.java
文件编译成了HelloWorld.class
文件,然后将class文件加载到不同操
作系统上的虚拟机JVM中,虚拟机将class文件解释并翻译成各个操作系统能识别的机器码,如上图中
的Windows环境和Linux环境,最终操作系统就能识别出并执行我们上图中的HelloWorld文件
然后我们就可以在终端上看到”hello world!”字样。
JVM执行过程
通过上面的介绍,我们对于Java程序大致的执行过程有了一个初步的了解。
但是对于JVM到底是如何来解释我们编译的class文件的,一个class是怎样被虚拟机找到并
执行的呢,通过下面的图解,我们可以有一个较为清晰的了解。
从图中我们可以看到,Java虚拟机通过加载配置,找到JVM的主要实现jvm.dll文件,然后初始化
jvm,获取JNI接口,通过JNI接口在本地找到我们存放的class文件,然后找到main方法并运行。
JVM结构图
通过上面,我们可以大致了解虚拟机的大致执行过程,但是实际远比这复杂,
不过也不用担心,后面我们一起逐步的分解学习,便能有一个清楚的认识。下面是JVM的一个整体
结构图,后面的讲解也会按照这个图上的内容,深入讲解虚拟机的相关知识,希望与大家共勉。
总结
以前记笔记都是自己随便整理一个doc文件,就当做学习笔记了,完全没有系统的 总结和学习,都是零零散散的。写博客一是为了系统化的学习,总结点滴知识, 还有就是做一个记录和分享,虽然才刚开始,但是慢慢来吧,加油。
参考
1.《深入理解JVM(二)》 PS:这次没有PDF链接了,只有纸质书籍~~~