天天看点

JVM 核心工作原理

首先jvm底层涉及知识过于广泛,这里介绍一个jvm的基础运行流程:

1:java类文件主要通过 类转载子系统 加载到jvm中。

2:将xxx.class文件的 常量、静态变量、类元信息等加载到元空间(方法区)存储起来。

3:然后栈里面存储都栈帧,每个线程都是独立的。里面主要存储:局部遍历表,操作数栈,动态链接,方法出口等核心数据。

4:这里大致介绍一下一个方法的运作流程:主要是通过字节码执行引擎调用程序计数器来执行栈帧里面的方法。main方法程每一行的执行,都是程序计数器记录了执行到哪一行,每一个线程,对应的程序计数器都是独享。

5:方法与发放之间的调用,主要是动态链接存储了当前方法执行的内存地址,可以理解为程序计数器的开始位置。

6:方法执行结束主要是由方法出口记录了方法的下一步对应程序技术器的第几部。然后方法结束时,就可以返回到上一个调用方法的位置。

7:对应的操作数栈就是简单的变量的对应的值,如下图的30、2、1等,局部变量表也就是存储了对应该方法作用域内定义的局部变量。

8:然后对象是如果找到对应的类元信息的。对象里有一个叫对象头的部分,存储了对应该类所对应的内元信息的地址指针。

9:栈里面存储的对象地址,然后实际的对象值,是存放在堆里面。这样也就是会导致对应的堆内存会很大,下一站会专门分析堆里面的内存是如何运转的以及对应的分布情况。

10:这里还有一个就是本地方法栈,也即是jvm底层其实采用的是C和C++开发的。有些方法,需要使用调用底层的Native修饰的方法。对应的方法指针内存存储在本地方法栈中,也是每个线程独享的。

JVM 核心工作原理