JVM
2020-12-04 18:41:34 0 举报
JVM栈
作者其他创作
大纲/内容
运行时数据区
初始化
当前栈
虚拟机栈
方法3
JVM
堆
栈针内部信息
程序计数器(PC寄存器)
解释下类的加载:双亲委派机制:当ClassLoader进行加载时,系统类不会去加载,他会交给上层的扩展类去加载,扩展类拿到之后也不会去加载,他会交给引导类去加载,若类可以被引导类加载,则引导类进行加载,若引导类加载不到则调给扩展类进行加载,若扩展类页加载不到,则最后由系统类加载器加载
解析
系统类加载器(ApplicationClassLoader)
操作数栈可理解为java虚拟机栈中的一个用于计算的临时数据存储区。存储的数据与局部变量表一致含int、long、float、double、reference、returnType,操作数栈中byte、short、char压栈前(bipush)会被转为int数据运算的地方,大多数指令都在操作数栈弹栈运算,然后结果压栈
class文件
操作数栈
验证加载的二进制字节流是否符合虚拟机的要求
程序计数器是JVM中不会GC和OOM的,其内存占用可以忽略不计,且是线程私有的,作用是记录记录字节码指令走到那一条了
这些符号引用一部分会在类加载阶段或者第一次使用时就直接转化为直接引用,这类转化称为静态解析。另一部分将在每次运行期间转化为直接引用,这类转化称为动态连接
动态链接
本地方法栈
栈针
方法返回地址
局部变量表
一般来说,方法正常退出时,调用者的PC计数值可以作为返回地址,栈帧中可能保存此计数值。而方法异常退出时,返回地址是通过异常处理器表确定的,栈帧中一般不会保存此部分信息
扩展类加载器(ExtentionClassLoader)
本地方法栈是线程私有的,是本地的方法,在加载时也会被夹在到内存方便java调用,C的一些方法
链接
加载
方法1
其他附加信息
1.局部变量表是方法解析的字节码,如下方法: public static void main(String[] args) { int i = 10; int j = 20; int var10000 = i + j; String abc = \"kity\
引导类加载器(BootStrapClassLoader)
方法2
执行引擎可以理解就是高级翻译,根据PC寄存器的地址将加载的class字节码文件翻译成机器可以识别的语言进行运行计算等操作
栈顶
虚拟机栈是运行时内存,而堆是存储的内存,栈不存在GC但存在OOM,因为只有入栈和出站两个操作所以没有GC,设置栈的内存可以使用Xss 10kXss 10M Xss 10G,k,m,g就是流量的单位,每个栈针对应一个方法,后进先出,执行引擎执行的字节码只针对栈针进行操作,如果栈针有调用了另一方法,则,执行到被调用的方法字节码时,则新方法入栈在栈顶
执行引擎
验证
准备
ClassLoader加载
方法区就是加载的class字节码
栈低
方法区
为类变量分配地址和初始化,如int类型,先回初始化为0,在进行复制,这是一个过程,实体类会在堆中分配内存和初始化赋值
0 条评论
下一页