2. 类加载器子系统
abstract
本文主要介绍类加载子系统,其中包括类的加载过程:加载、链接、初始化;以及 ClassLoader 的分类和 ClassLoader 的双亲委派机制等内容。
2.1. 内存结构
简图

详细图
笔记(Class Loader SubSystem)
类的加载分为3个环节:Loading -> Linking -> Initialization
加载需要用到类加载器,类加载器分为3种
BootStrap ClassLoader:引导类加载器Extension ClassLoader:扩展类加载器Application ClassLoader:应用程序类加载器
笔记(Runtime Data Area)
PC寄存器(PC Register):每个线程一份,所以放了很多份
虚拟机栈(Stack Area):每个线程一份,每个线程的栈里一个一个的解构称为栈帧。还有一些细节的内部结构后续对应的章节会详细讲解。
Stack Area
- LV - Local Variables 本地变量表
- OS - Operation Stack 操作数栈
- DL - Dynamic Linking 动态链接
- RA - Return Address 返回地址
堆区(Heap Area):主要是创建JAVA对象的,这些对象,我们主体都分配在这个堆空间当中,也是我们内存当中算是最大的一块空间,也是GC,重点要考虑的一块空间。堆区是共享的,被多个线程所共享的。
方法区(Method Area):主要是来存放我们的一些类的信息、一些常量、一些域信息、方法信息等等。方法区,只有HotSpot虚拟机才有,像JRockit和J9他们其实都没有。
如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?
- 类加载器
- 执行引擎