深入理解JVM虚拟机第六篇:内存结构与类加载子系统概述

文章目录

一:内存结构概述

1:运行时数据区

2:运行时数据区简图

3:运行时数据区详细图中英文版 

二:类加载器子系统 

1:加载

2:连接

3:初始化


一:内存结构概述

1:运行时数据区

        class文件被称为字节码文件,从字节码文件之后都是由我们的JVM负责的了。

        首先需要就是基于ClassLoader将我们的类加载到JVM当中,对应到我们的内存当中生成大的Class对象,并将静态属性进行一个初始化,当前这个操作主要是在方法区体现他的操作。

        当我们真正字节码指令的时后,执行引擎就开始发挥作用了,一开始是我们的执行引擎。按照字节码指令依次是去做执行。这里边就涉及到虚拟机栈的从局部变量表中去取数据,包括还需要操作操作数栈。如果需要创建对象的话,还需要使用到我们的堆空间,在这个过程中我们的指令依次往下走的话需要用到程序计数器。如果在整个过程中需要调用本地方法的话,还需要使用本地方法栈。

        以上就是运行时数据区的一个概念。

2:运行时数据区简图

        

深入理解JVM虚拟机第六篇:内存结构与类加载子系统概述_第1张图片

3:运行时数据区详细图中英文版 

 深入理解JVM虚拟机第六篇:内存结构与类加载子系统概述_第2张图片

        

 深入理解JVM虚拟机第六篇:内存结构与类加载子系统概述_第3张图片

二:类加载器子系统 

        类加载阶段涉及到三个大阶段:

1:加载

        加载阶段需要用到我们的类加载器,这里共涉及到三类加载器:引导类加载器、拓展类加载器、系统类加载器(应用级加载器)。

2:连接

连接阶段又分为:验证、准备、解析阶段。

3:初始化

静态变量的显示初始化。

        接下来,在整个的这个过程中我们就把Java中的类或者接口都加载进入到JVM当中了。这个时候,我们在运行时数据区里边。虚拟机栈、本地方法栈、程序计数器都是每个线程一份。

        栈里边的一个又一个的结构被称之为栈帧。栈帧还有很细节的内部结构。LV代表本地变量表,OS代表操作数栈,DL代表动态链接,RA代表方法返回地址。

        本地方法栈跟虚拟机栈的区别,他是专门调用native的本地方法的。

        堆区是最大的一块空间。GC主要伺候的一个空间。方法区主要是存放类的信息、常量、域信息、方法信息等。方法区只有Hotspot虚拟机才有,其他的虚拟机都没有。

        解释器和JIT及时编译器和我们的垃圾回收期都在我们的执行引擎中。他的作用就是将我们的指令翻译成为机器指令,供CPU去执行。

        如果自己手写一个Java虚拟机的话,主要考虑哪些结构呢? 类加载器和执行引擎

你可能感兴趣的:(JVM专栏,jvm)