JVM_ 动态链接
虚拟机栈: -> 栈帧---对应每个方法----> 包含: 局部变量表, 本地方法栈, 动态链接, 方法出口,
动态链接: 每个栈帧都保存了 一个 可以指向当前方法所在类的 运行时常量池, 目的是: 当前方法中如果需要调用其他方法的时候, 能够从运行时常量池中找到对应的符号引用, 然后将符号引用转换为直接引用,然后就能直接调用对应方法, 这就是动态链接
不是所有方法调用都需要动态链接的, 有一部分符号引用会在 类加载 解析阶段, 将符号引用转换为直接引用, 这部分操作称之为: 静态解析. 就是编译期间就能确定调用的版本, 包括: 调用静态方法, 调用实例的私有构造器, 私有方法, 父类方法
https://blog.csdn.net/denverj/article/details/84078460?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduend~default-2-84078460.nonecase&utm_term=jvm%E5%8A%A8%E6%80%81%E9%93%BE%E6%8E%A5%E6%98%AF%E4%BB%80%E4%B9%88
当编译Java程序的时候,会得到程序中每一个类或者接口的独立的class文件。虽然独立看上去毫无关联,但是他们之间通过接口(harbor)符号互相联系,或者与Java API的class文件相联系。当运行程序的时候,Java虚拟机装载程序的类和接口,并且在动态连接的过程中把它们互相勾连起来。在程序运行中,Java虚拟机内部组织了一张互相连接的类和接口的网。
class把他们所有的引用符号放在一个地方——常量池。每一个class文件有一个常量池,每一个被Java虚拟机装载的类或者接口都有一份内部版本常量池,被称作运行时常量池。运行时常量池是特定与实现的数据结构,数据结构映射到class文件中的常量池。因此,当一个类型被首次装载的时候,所有来自于类型的符号引用都装载到了类型的运行时常量池。
在程序运行的过程中,如果某个特定的符号引用将要被使用,它首先要被解析。解析过程就是首先根据符号引用查找到实体,再把符号引用替换成直接引用的过程。因为所有的符号引用都是保存在常量池中,所以这种解析叫做常量池解析。
最新文章
- 一个简易的四则运算单元...(15.12.15 BUG更新)
- DevExpress gridControl 设置分组
- QT 的下载地址
- homework 11 2016 5 13 读入文件做输入
- DDD:建模原语 之 四象图(转载的神文)
- oracle 新手遇到常见问题的解决办法
- 解决IE10以下对象不支持“bind”属性或方法
- JavaScript基础学习(四)—Object
- MyEclipse中查看struts_spring_hibernate源码
- java代码之美(2)---Java8 Stream
- spring boot中jsp解析c标签方法
- C# DES加密类,16位的加密。
- 测试开发学习进阶教程 视频&;PDF
- expdp/impdp数据泵分区表导入太慢了。添加不检查元数据参数提高效率:ACCESS_METHOD=DIRECT_PATH
- Map中根据条件删除元素
- python必须要安装的库
- 学习笔记之ASP.NET MVC &; MVVM &; The Repository Pattern
- leetcode210
- 转载hibernate 的3种 状态 。。
- 170530、java 迭代hashmap常用的三种方法