JVM虚拟机栈
文章平均质量分 74
Clare丶Diane
这个作者很懒,什么都没留下…
展开
-
JVM 之 执行引擎
执行引擎属于 JVM 的下层,里面包括解释器、及时编译器、垃圾回收器。执行引擎是 Java 虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。编译执行:及时编译器产生本地代码执行解释执行:通过解释器执行...原创 2022-04-28 14:08:51 · 357 阅读 · 0 评论 -
JVM 之 虚拟机栈 之 方法调用(详细)
1. 基本概念方法调用并不等同于方法中的代码被执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪个方法), 暂时还未涉及方法内部的具体运行过程。 在程序运行时,进行方法调用是最普遍、最频繁的操作之一,Class 文件的编译过程除遇到任中不包含传统程序语言编译的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的人口地址(也就是之前说的直接引用)。这个根据遇特性给Java带来了更强大的动态扩展能力,但也使得Jav...原创 2022-04-28 13:08:05 · 421 阅读 · 0 评论 -
JVM 之 虚拟机栈 之 方法返回地址(详细)
1. 基本概念方法返回地址用于存放调用该方法的 pc 寄存器的值。当一个方法开始执行后,只有两种方式退出这个方法:第一种方式是执行引擎遇到任意一个方法返回的字节码指令,这时候可能会有返回值传递给上层的方法调用者(调用当前方法的方法称为调用者或者主调方法),方法是否有返回值以及返回值的类型将根据遇到何种方法返回指令来决定,这种退出方法的方式称为“正常调用完成”。 一个方法在正常调用完成之后究竟需要使用哪一个返回指令还需要根据方法返回值的实际数据类型而定。 在字节码指令中,返回.原创 2022-04-27 11:46:40 · 649 阅读 · 0 评论 -
JVM 之 虚拟机栈 之 动态连接(详细)
1. 具体概念 每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。比如:invokedynamic 指令。该引用的目的支持动态代理 在 Java 源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(Symbolic Reference)保存在 class 文件的常量池里。比如:描述一个方法调用了另外的其他方法时,就是通过常量池中指向方法的符号引用来表示的,那么动态链原创 2022-04-25 22:14:28 · 2037 阅读 · 0 评论 -
JVM 之 虚拟机栈 之 操作数栈(详细)
1.基本概念操作数栈(Operand Stack)也常被称为操作栈,它是一个后入先出(LIFO)栈。同局部变量表一样. 操作数栈的最大深度也在编译的时候被写入到Code属性的max_ stacks数据项之中,操作数栈的深度都不会超过在max stacks数据项中设定的最大值。。操作数栈的每一个元素都可以是包括long和double在内的任意Java数据类型。32位数据类型所占的栈容量为1。64位数据类型所占的栈容量为2。操作数栈,主要用于保存计算过程的中间结果,同时作为计算过程中变量临时...原创 2022-04-25 21:53:08 · 1630 阅读 · 0 评论 -
JVM 之 虚拟机栈 之 局部变量表(详细)
1. 基本概念局部变量表:Local Variables,被称为局部变量数组或本地变量表 ,处于虚拟机栈中,如图所示:定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型(byte、short、int、boolean、float、char、long、double)、对象引用(reference),以及 returnAddress 类型。由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安全问题局部变量表所需的容量大小是在..原创 2022-04-25 21:16:31 · 3027 阅读 · 0 评论