一.编译
作为开发者,我们经常会编写一些java后缀结尾的文件,我们通过类似boot的项目打成jar包或者传统ssm项目打成war包。
实际经过编译以后会生成.class文件,这是一种字节码文件,他是可以被jvm运行起来的。关于类加载机制这里后面说明。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304092022834.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MDMxNjc1,size_16,color_FFFFFF,t_70)
二.JVM运行过程
class文件进入到Java系统中,我们启动项目(java -jar)会启动一个jvm进程,一个进程会有多个线程(比如回收线程);
接下来会出现一个类加载器的概念,它会帮我们的一个个class类加载到jvm里面
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304092523672.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MDMxNjc1,size_16,color_FFFFFF,t_70)
接着jvm就会根据自己的字节码执行引擎来执行类到内存里。
比如我们经常写的main方法就是代码执行的入口。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200304092823107.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3MDMxNjc1,size_16,color_FFFFFF,t_70)