jvm架构图示(图是借鉴网上的)
JVM主要分为三个子系统:
-
类加载器
-
运行时数据区
-
执行引擎
1、类加载器
类加载器的运行流程:
1)loading:
- 获取字节流
- 将可存储的字节流转换为运行时数据
- 在内存堆中生成class对象
2)linking:
- veryfy:将字节流进行格式元数据字节码验证
- prepare:为静态变量分配内存空间
- resolve:将引用转为直接引用
3)initialize:
调用类的构造器方法,如果调用时发现父类构造器没有执行会先触发父类构造器。
2、运行时数据区
这里从图可以看出共享的区域有两个:方法区和堆区;栈区和本地方法栈都是线程私有且安全的。
1)栈:主要是临时变量;
2)堆:存储Java 对象以及实例变量
3)方法区:存储的主要是所有运行时类的数据,以及常量池。运行时数据(静态方法、静态变量,常量,成员方法)
4)寄存器:方法指令(类似计算机组成原理里面的寄存器)
5)本地方法栈:这里每个线程都会生成一个本地方法栈