一、概述
类型的连接是指把字节码二进制静态结构合并到运行时状态中去。连接又分为验证、准备和解析三个阶段。
二、验证
验证装载到jvm中的字节码流的合法性。jvm spec没有规定具体做什么验证。根据不同的虚拟机实现大概又分为语法验证、语义验证、字节码流验证和引用验证。
1、语法验证,校验字节码语法正确性,使得该类型信息可以存储在方法区内,如魔数、主次版本号、Utf8常量池表项中存储的是合法的utf8值、常量池表项的tag值在是spec中规定的取值范围内、字节码完整未被删除或添加多余数据等。
2、语义验证,校验字节码符合java语言规范,如除了Object外所有对象都必须有一个超类、非抽象类必须实现超类或接口中的抽象方法、不能继承final类、不能重写final方法、不能改变final字段值、不能有同名同参不同返回值的方法。
3、字节码流验证,此阶段是校验方法的字节码,如跳转指令不能跳转到方法体以外、指令后跟正确的操作数如操作long类型值的指令后不能是个int型的值、类型转换有效。JDK1.6添加了StackMapTable属性加快字节码流校验,其内部存储的是本地变量表和操作数栈的初始状态。
4、引用验证,验证符号引用的对象合法, 如引用的类型/方法/字段等存在、具有类型/方法/字段的访问权限(private/protected/public)。
三、准备
准备阶段是为类变量分配内存并赋默认值,如果字段有ConstantValue属性,就把ConstantValue里的值作为字段的初始值。根据特定实现,也可能为方法表等别的结构分配内存。
四、解析
解析就是把产量池的符号引用解析为直接引用。
符号引用:符号描述表示的引用
直接引用:指向特定对象如实例、实例方法、字段、静态方法的内存地址、偏移量或间接句柄。
不同类型的常量池类型,解析方法不同。
分享到:
相关推荐
一份JVM学习的笔记,含查看JVM运行时信息\JVM垃圾收集信息\JVM锁信息等
java之jvm学习笔记五(实践写自己的类装载器)
JVM学习笔记.docx
java之jvm学习笔记十一(访问控制器)-源码
jVM学习笔记.ppt
从JVM内存模型、常用JVM参数、垃圾回收算法和垃圾回收器等几个角度学习JVM
JVM学习笔记(缓慢更新).md
关于JVM中对象的生命周期的讲解,不错!!
jvm经典笔记
JVM 学习笔记(Java虚拟机)
包含了jvm的视频,jvm的笔记
jvm中篇笔记.md
一.java内存结构 2 二 垃圾收集算法: 3 三 JVM参数 4 四 JVM的垃圾回收集器 7 五 常用参数设置 7
java之jvm学习笔记九(策略文件)
买的JVM学习资料(深入JVM内核—原理、诊断与优化),给大家分享还有自己整理的学习笔记
java之jvm学习笔记八(实践对jar包的代码签名)
JVM学习笔记核心知识点整理,包含类文件加载机制,运行时数据,JVM内存模型,GC算法,垃圾收集器分类等
java之jvm学习笔记十二(访问控制器的栈校验机制)
JVM工作原理学习笔记,感兴趣的小伙伴们可以下载来看看。