
JVM
J TwT J
这个作者很懒,什么都没留下…
展开
-
JVM学习记录七:栈帧内部结构
局部变量表:定义为一个数字数组,最基本的存储单元:槽 slot存放基本数据类型、引用类型、returnAddress 32以内占用两个slot 64位占两个slotslot重复利用问题,局部变量b变量作用域过了,销毁掉了,下一个变量c会重复利用这个slot操作数栈操作数栈用于存放栈帧中的执行中间结果:解析:实例方法以及反编译指令集如下:1、2、3、4、5、6、7、...原创 2020-06-29 18:14:07 · 245 阅读 · 0 评论 -
JVM学习记录六:运行时数据区-虚拟机栈
栈是运行时的单位,堆是存储的单位虚拟机栈内部保存一个个栈帧,对应一次次方法的调用线程私有,生命周期和线程一致,展示一种快速分配存储的方式,访问速度仅次于程序计数器,不存在垃圾回收问题主管java程序的运行,保存方法的局部变量(基本数据类型,对象的引用地址)jvm虚拟机规范允许java栈的大小是动态的或者是固定不变的固定不变的:每一个线程的虚拟机栈容量可以在线程创建的时候独立选定,如果超过了这个虚拟机栈允许的最大容量JVM就会抛出StackOverFlowError动态扩展: 在尝试扩展的时候无法原创 2020-06-13 16:12:13 · 138 阅读 · 0 评论 -
JVM学习记录五:运行时数据区-程序计数器(PC寄存器)
PC寄存器:程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。线程私有为什么是线程私有?Java虚拟机的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现,也就是说,在同一时刻一个处理原创 2020-06-13 14:22:27 · 236 阅读 · 0 评论 -
JVM学习记录四:类加载子系统
类加载子系统包括: 加载-》链接-》初始化1、加载:加载class字节码文件,加载器:(引导类加载器、扩展类加载器、系统类加载器)2、链接:链接阶段分为三个步骤:验证(验证字节码文件是否符合JVM规范)、准备(给类变量设置内存、赋初始值、如果类变量被final修饰则直接在准备阶段初始化)、解析(将常量池中的符号引用转换成直接引用)3、初始化:初始化阶段就是执行类构造器方法() 方法,他会将类变量赋值动作、以及静态代码块中的语句合并,按代码顺序执行如果没有静态变量和静态代码块则不存在clinit方法,原创 2020-06-09 15:55:19 · 174 阅读 · 0 评论 -
JVM学习记录三:JVM内存结构概述
这里放一个尚硅谷宋红康JVM画的图便于理解整个架构原创 2020-05-30 15:37:51 · 177 阅读 · 0 评论 -
JVM学习记录二:JVM解释器与JIT即时编译器
解释器 :响应快,逐行解释字节码,执行机器指令,但执行时间长,执行效率低即时编译器(JIT): 反复执行的热点代码即时编译成本地机器指令,存入方法区缓存codeCache,响应慢,执行效率高JVM类型 :SUN Classic VM : 使用解释器 可以外挂即时编译器(JIT)一旦使用JIT则由JIT接管,解释器就不能使用了Exact VM : 能够知道内存中某个位置的数据具体是什么类型,具备现代高性能虚拟机的雏形,热点探测、编译器和解释器混合工作模式HotSpot : 解释器与即时编译器混合使原创 2020-05-30 15:25:53 · 206 阅读 · 0 评论 -
JVM学习记录一:栈的指令集与寄存器指令集
public class Test01 { public static void main(String[] args) { int i = 1;原创 2020-05-29 17:51:35 · 200 阅读 · 0 评论