深入理解Java虚拟机
不会游泳的小青龙
这个作者很懒,什么都没留下…
展开
-
深入Java虚拟机(四)——虚拟机字节码执行引擎
运行时栈帧结构栈帧是用于支持虚拟机进行方法调用好方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。在编译代码的时候,栈帧中需要多大的局部变量表,多深的操作数栈都已经完全确定了,并且写入到方法表的Code属性中,因此一个栈帧需要分配多少内存,不会受到程序运行期变量数的影响。局部变量表局部变量表是一组变量值存储空间,用于存放方法参数和方原创 2020-09-24 21:29:33 · 54 阅读 · 0 评论 -
深入Java虚拟机(三)——虚拟机类加载机制
虚拟机类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。类型的加载、连接和初始化过程都是在程序运行期间完成的。类加载的时机类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparing)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准原创 2020-09-24 19:55:55 · 99 阅读 · 0 评论 -
深入理解Java虚拟机(三)——类文件结构
Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件之中,中间没有添加任何分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据,没有空隙存在。当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。Class文件格式只有两个数据类型:无符号数和表。无符号数属于基本的数据类型,以u1、u2、u4、u8来分别代表1个字节、2个字节、4个字节和8个字节的无符号数,无符号数可以用原创 2020-09-24 08:17:19 · 64 阅读 · 0 评论 -
深入Java虚拟机(二)——垃圾收集器与内存分配策略
引用计数算法给对象添加一个引用计算器,每当有一个地方引用它时,计算器数值就加1;当引用失效时,计算器数值就减1;任何时刻计数器为0的对象就是不可能再被使用的。Java虚拟机没有选用引用计数算法进行内存管理,最主要的原因是它很难解决对象之间相互循环引用的问题。可达性分析算法通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,证明此对象是不可用的。可作为GC Roots的对象包括以下几种:(1)原创 2020-09-22 18:22:48 · 62 阅读 · 0 评论 -
深入Java虚拟机(一)——Java内存区域
运行时数据区域1、程序计数器:“线程私有”,可以看作是当前线程所执行的字节码的行号指示器。2、Java虚拟机栈:“线程私有”,描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。(1)局部变量表存放了编译器可知的各种基本数据类型、对象引用和returnAddress类型(指向了一条字节码指令的地址)。(2)局部变量表所需的内存空间在编译期间完成分配原创 2020-09-20 12:23:15 · 68 阅读 · 0 评论