学习 JVM,那么得先明白我们平时写的代码,到底是怎么运行起来?
首先,我们会写好一堆以 .java 结尾的代码文件,
那么,我们也好的程序是如何部署到服务器呢?一般来说,我们会把代码打成“.jar”的jar 包,或者打成“.war”de war包。
然后,把打成的 jar 包或者 war 包放到线上服务器去部署。
这个部署就有很多种途径了,但是最基本的一种方式,就是通过Tomcat这类容器来部署代码,也可以是你自己手动通过 “java”命令来运行一个jar包中的代码。
这个有一个关键的步骤编译,
也就是我们写好的 “.java” 代码在打包过程会变成“.class” 后缀的字节码,
那么这些字节码是如何被运行起来的?
这个时候我们可能会使用“Java -jar” 之类的命令来运行我们的程序,此时你一旦采用“java” 命令,也就相当于启动一个 JVM 进程。
这个 JVM 会运行这些“.class” 的字节码文件,也就相当于运行我们也好的系统。
所以平时我们写好的某个系统在一台机器上部署的时候,其实就启动一个 JVM ,由它来负责运行这台机器上的这个系统。
那么又来问题,JVM 要想运行这些“.class ” 字节码,是不是得先把这些“.class” 文件中包含的各种类加载进来。
这些 “.class” 文件其实就是我们写好的一个个类,此时就一个有一个“类加载器”概念。也就是此时会采用类加载器把编译好的那些 “.class” 字节码 加载到 JVM 中。
最后,JVM 会基于自己的字节码执行引擎,来执行这些加载到内存的类。
比如说:你的代码中有一个 main() 方法,那么JVM 就会从这个 main() 方法开始执行里面的代码。他需要哪个类的时候,就会使用类加载器来加载对应的类。
所以我们平时写的“.java” 后缀的源代码开始,一步一步梳理出以下的流出:
1、写好的代码编译成 “.class” 后缀饿字节码文件
2、JVM 是个什么东西
3、JVM 跟我们平时运行在机器上的系统之间是什么关系
4、类加载器的概念
5、针对加载内存的类进行代码的执行