点击上方蓝字关注我,让我成为你的专属小太阳
首先假设咱们写好了一份Java代码,那这份Java代码中,是不是会包含很多的“.java”为后缀的代码文件?
比如User.java,OrderService.java,CustomerService.java
平时在Eclipse、Intellij Idea等开发工具中,就有很多类似这样的Java源代码文件。
现在思考一下,当写好这些“.java”后缀的代码文件之后,接下来你要部署到线上的机器去运行,你会怎么做?
一般来说,都是把代码打成“.jar”后缀的jar包,或者是“.war”后缀的war包
然后,就是把打好的包放到机器上去部署
像下图这样:
实际上这里有一个非常关键的步骤,就是“编译”
也就是说,在我们写好的“.java”代码打包的过程中,一般就会把代码编译成“.class”后缀的字节码文件,比如 User.class,Hello.class,Customer.class
然后这个 class 后缀的字节码文件,他也是可以被运行起来的
就是下图的过程:
接着就要思考下一个问题:
对于编译好的这些 .class 字节码,是怎么让他们运行起来的呢?
这个时候就需要诸如 java -jar 之类的命令来运行我们写好的代码了
此时一旦你采用 java 命令,实际上此时就会启动一个JVM进程
这个 JVM 就会来负责运行这些 .class 字节码文件,也就相当于是负责预先我们写好的系统
下一步,JVM 要运行这些 “.class” 字节码文件中的代码,首先得把这些“.class”文件中包含的各种类给加载进来
此时就会有一个“类加载器”的概念
此时会采用类加载器把编译好的那些“.class”字节码文件给加载到JVM中,然后供后续代码运行来使用
最后一步,JVM 就会基于自己的字节码执行引擎,来执行加载到内存里我们写好的那些类了
比如你的代码有一个 main 方法,那么 JVM 就会从这个 main 方法开始执行里面的代码
它需要哪个类的时候,就会使用类加载器来加载对应的类,反正对应的类就在 class 文件中
最后,整体的过程就是这样的:
这就是通俗的java代码执行的过程