摘要: 4.9本地方法接口 一个Native Method就是一个java调用非java代码的接口,一个Native Method是这样一个java方法:该方法的实现由非java语言实现,比如C。这个特征并非java所持有,很多其他的编程语言都有这一机制,比如在c中,你可以用extern "C"告知c编译其 阅读全文
posted @ 2021-10-08 22:34 Lz_蚂蚱 阅读(50) 评论(0) 推荐(0)
摘要: 4.10本地方法栈 Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackOve 阅读全文
posted @ 2021-10-08 22:34 Lz_蚂蚱 阅读(43) 评论(0) 推荐(0)
摘要: 4.7方法返回地址 存放调用该方法的pc寄存器的值。 一个方法的结束有两种方式: 正常执行完成 出现未处理的异常,非正常退出。 无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。**方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址。**而通过异常退 阅读全文
posted @ 2021-10-08 22:33 Lz_蚂蚱 阅读(123) 评论(0) 推荐(0)
摘要: 4.6方法的调用 静态链接与动态链接 在JVM中,将符号引用转换为调用方法的直接引用与方法的绑定机制相关。 静态链接: 当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可知,且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接。 动态链接: 如果被调 阅读全文
posted @ 2021-10-08 22:32 Lz_蚂蚱 阅读(70) 评论(0) 推荐(0)
摘要: 4.5动态链接 每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。比如:invokedynamic指令。 在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(Symb 阅读全文
posted @ 2021-10-08 22:31 Lz_蚂蚱 阅读(65) 评论(0) 推荐(0)
摘要: 4.4操作数栈 每一个独立的栈帧中除了包含局部变量表之外,还包含一个后进先出(Last-In-First-Out)的操作数栈,也可以称之为表达式栈(Expression Stack)。 操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)/出栈(pop)。 某些字 阅读全文
posted @ 2021-10-08 22:30 Lz_蚂蚱 阅读(192) 评论(0) 推荐(0)
摘要: 4.3局部变量表 局部变量表也称为局部变量数组或本地变量表 定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddress类型。 由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安 阅读全文
posted @ 2021-10-08 22:28 Lz_蚂蚱 阅读(378) 评论(0) 推荐(1)
摘要: 4.2虚拟机栈 4.2.1概述 概念: java虚拟机栈(Java Virtual Machine Stack),早期也叫Java栈。每个线程在创建时都会创建一个虚拟机栈,其内部保存一个个的栈帧(Stack Frame),对应着一次次的Java方法调用。是线程私有的。 生命周期: 生命周期和线程一致 阅读全文
posted @ 2021-10-08 22:26 Lz_蚂蚱 阅读(69) 评论(0) 推荐(0)
摘要: 4.运行时数据区 4.1程序计数器(PC寄存器) 作用:PC寄存器用来存储指向下一条指令的地址,即将要执行的指令代码。由执行引擎读取下一条指令。 它是一块很小的内存空间,几乎可以忽略不计。也是运行速度最快的存储区域。 在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命 阅读全文
posted @ 2021-10-08 22:24 Lz_蚂蚱 阅读(664) 评论(0) 推荐(0)