ZKX's LAB

我们的java程序如何跑起来

2020-09-27新闻9

1、我们的代码如何跑起来

作为一名java开发的程序员,我们平时做了各种各样的系统,但是我们有没有思考过,我们的程序是如何跑起来的呢?平时我们做项目的流程,无非编写一些java代码,然后打包成war包或者jar包,通过tomcat部署或者java -jar命令,然后就跑起来了。我们用下图来了解一下这个流程:

我们的java程序如何跑起来

是的,我们把我们写的java文件打包编译成class文件,然后通过java -jar启动一个jvm进程,将这些class字节码加载到我们的jvm内存中,然后就运行起来了。

2、jvm如何加载class字节码

上文提到将class字节码加载到jvm内存中,其实就是一个类加载过程。那么我们的类加载过程是怎么样的呢?一般来说,我们一个类从加载到使用,都会经历一下几个过程:

我们的java程序如何跑起来

那么第一个问题就来了,类是什么时候加载到内存的,它的入口是什么?当然,当我们启动一个jvm进程时,类就会加载到内存中,并且在类中找到main方法,这个就是入口,从而开始加载你的程序,以下面这个程序为例:

我们的java程序如何跑起来

当启动jvm进程后,就会把Main.class文件加载到内存中,并且找到main方法,开始执行程序。当开始执行的时候,发现需要用到User对象实例,那么就会把User.class字节码加载到内存中来。用下面图表示:

我们的java程序如何跑起来

其实上面就是一个加载的过程,接下来我们来看一下验证的过程。所谓验证,就是你加载到内存进来的class文件,要先校验是否符合jvm规范,符合了才能交给jvm去运行,用下面的图表示一下:

我们的java程序如何跑起来

校验通过后,就进入准备阶段,所谓的准备,就是为你即将用到的对象分配内存空间,比如我们要用到User对象,那么就会为User对象分配内存空间。这个过程用下图表示:

我们的java程序如何跑起来

准备阶段过后,就进入了解析阶段,所谓解析,就是把符号的引用替换成直接引用的过程,用下图表示:

我们的java程序如何跑起来

解析过后,就进入初始化阶段,一般初始化的时机有两个:第一个是含有main方法会被立即初始化、第二个是出现new比如我们这个简单程序中的new User()。其实我们在准备的阶段对象并没有真正实例化,只是分配了内存,真正的实例化是在初始化阶段,会把对象创建出来。用下图表示:

我们的java程序如何跑起来

好了,上面已经把我们这个类加载过程用一步一图形式表示出来,在类加载过程中,每步做自己的事情,把整个流程串起来,这就是我们类加载机制。

#技术编程

随机阅读

qrcode
访问手机版