JVM栈帧内部结构-动态链接 Jvm
动态链接(或运行时常量池的方法引用):
每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用,包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。比如:invokedynamic指令
在Java源文件被编译到字节码文件时,所有的变量和方法引用都作为符号引用(Symbilic...
JVM指令集、类加载子系统介绍 Jvm
Jvm整体架构图:
Jvm指令集架构:
指令集架构分为两种:
1.基于栈的指令集架构(Java编译器是基于栈的指令集架构)。
2.基于寄存器指令架构。
栈的指令架构:
优势:跨平台、零地址指令、指令集更小、移植性高。(编译器更容易实现)
劣势:指令多,性能下降(实现同样的功能需要更多指令)
寄存器指令架构:
优势:性能优秀、执行效率高,指令少
劣势:移植性...
JVM栈帧内部结构-局部变量表 Jvm
栈帧内部结构:
1) 局部变量表(Local Variables)
2) 操作数栈(Operand Stack)或表达式栈
3) 动态链接(Dynamic Linking)或指向运行时常量池的方法引用
4) 方法返回地址(Return Address)或方法正常退出或异常退出的定义
5) 一些附加信息
局部变量表(Local Variables):
局部变...
JVM栈帧内部结构-操作数栈 Jvm
基本概念:
操作数栈是基于数组的方式实现的。
在方法执行过程中,根据字节指令,往栈中写入(入栈/push)数据或提取(出栈/pop)数据。
某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈,使用它们后再把结果压入栈。(比如:复制,交换,求和等操作)
操作数栈主要用于保存计算过程的中...
JVM运行时数据区-程序计数器 Jvm
运行时数据区分为:
程序计数器(PC寄存器)、虚拟机栈、本地方法栈、方法区、堆区
线程共享区:方法区,堆区。
线程独立区:程序计数器(PC寄存器)、虚拟机栈、本地方法栈。
JVM线程:
1.一个JVM线程对应一个Runtime(运行时数据区)
2.JVM允许一个应用有多个线程并执行。
3.当一个Java线程准备好执行后,此时操作系统的本地线...
JVM运行时数据区-虚拟机栈 Jvm
Java虚拟机栈(Java Virtual Machine Stack):
基本概述:
跨平台设计,Java指令根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的
线程私有的,每个线程创建时都会创建一个虚拟机栈,其内部保存一个个栈帧(Stack Frame),一个栈帧对应一个Java方法。
内存中的栈与堆的区别:
堆:存储数据区域
栈:运...
JVM栈帧内部结构-方法返回地址 Jvm
方法返回地址(Return Address):
存放调用该方法的PC寄存器的值。
方法结束方式:
1) 正常结束
2) 出现未处理异常,非正常退出(通过异常完成出口退出的不会给他的上层调用者生产任何的返回值)
无论通过哪种方式退出,在方法退出后到该方法被调用的位置,方法正常退出时,调用者的PC计数器的值作为返回地址,即调用该方法的指令的下一条指令地址,而通过...