JVM架构
2020-10-30 17:34:35 0 举报
jvm架构
作者其他创作
大纲/内容
classLoader(类加载器)
编译
Java字节码文件(.class)
执行引擎
运行时数据区
Java堆:是所有线程共享的一块内存,在虚拟机启动时被创建,几乎所有的对象实例都在这里被创建,所有该区域经常发生垃圾回收操作方法区:1,有时候也被称为永久区,在该区内很少发生垃圾回收,但不代表不发生GC,在这里进行的GC主要是对方法区里的常量池和类型的卸载 2,方法区主要用来存储已经被虚拟机加载的类的信息,常量,静态变量和即时编译器编译的代码等数据 3,该区域是线程共享的 4,方法区里有一个运行时常量池,用于存放静态编译时产生的字面量和字符引用,该常量池具有动态性,也就是说常量不一定是编译时 确定的,运行时生成的常量也会放在这个常量池内虚拟机栈:也就时我们平时说的栈内存,他为java方法服务,每个方法在执行时都回创建一个栈帧,用于存储局部变量表,操作数栈,动态链接和方 法出口信息等本地方法栈:和虚拟机栈类似,不过本地方法栈是为native方法服务的程序计数器:是一块较小的空间,字节码解释器工作时,通过改变这个计数值可以选取下一条需要执行的字节码指令;分支、循环、调整、异常处理 和线程恢复要依赖这个计数器完成,该区域是唯一一个虚拟机没有规定任何OOM情况的区域
Java堆
Java源代码文件(.java)
程序计数器
1,加载:将class字节码文件加载到内存中,并将这些数据转化成方法区中的运行时数据(静态变量,静态代码,常量池等),在堆中生产一个Class类对象代表这个类(反射原理),作为方法区类数据的访问入口2,验证:确保加载的类信息符合JVM规范,没有安全方面的问题3,准备:正式为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配,此时的设置初始值为默认值4,解析:虚拟机常量池内的符号引用替换为直接引用(地址引用)的过程5,初始化:初始化阶段时执行类构造器方法的过程,类构造器方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块中的语句合并产生的
Java编译器
本地方法栈
方法区
虚拟机栈
加载到JVM
0 条评论
下一页