栈:主要是存放栈帧,每个方法都有一个独有的栈帧,每个栈帧都存放着每个方法的局部变量,栈的储存规则,先进后出,后进先出,
栈帧:栈帧中又有局部变量表,操作数栈,动态链接,方法出口
局部变量表:变量信息储存位,存储变量,包括对象类型的变量
操作数栈:把常量压入操作数栈 #当一个常量赋值给一个变量的时候,操作数栈会把栈内的常量压入局部变量表中,与之相对应的变量赋值
程序计数器:是指当程序运行时,执行JVM命令的地址,也可以说成指针,每当程序计数器执行一行代码,指令,JVM的执行引擎会修改程序计数器的值,地址
当再次用到某一个被赋值的变量时,会把这个变量的值从局部变量表中抽取出来到操作数栈中,但变量不会动,操作数栈,还负责将被抽取到的常量进行一一临时运算,最后将新算出的值从新压入到局部变量表中,与对应的变量进行关联,
方法出口:当方法结束后,返回到主方法中,并告诉程序执行结束
动态链接:什么是动态链接呢,动态链接就是我们创造一个对象时,当我们调用此方法时,对象指针会将此方法从方法区中取出的地址放入动态链接的空间中,动态链接可以说就是储存对象内方法的地址,当new一个对象时,每一个对象都会指向一个类,每个类中的方法叫做密码
堆
主要存放的是对象的地址,类似于C语言的指针,由栈中的对象类型的变量指向堆中的地址
本地方法栈
java的本地代码,底层由c语言实现的,当运行到本地方法时,会进入系统内部的软件包中着执行.dll文件,执行方法
GC root根
表示一个引用一失效,或指针断开,没有指向的地址的指针,是一种没有赋值的变量