虚拟机栈: -> 栈帧---对应每个方法----> 包含: 局部变量表, 本地方法栈, 动态链接, 方法出口,

动态链接: 每个栈帧都保存了 一个 可以指向当前方法所在类的 运行时常量池, 目的是: 当前方法中如果需要调用其他方法的时候, 能够从运行时常量池中找到对应的符号引用, 然后将符号引用转换为直接引用,然后就能直接调用对应方法, 这就是动态链接

不是所有方法调用都需要动态链接的, 有一部分符号引用会在 类加载 解析阶段, 将符号引用转换为直接引用, 这部分操作称之为: 静态解析. 就是编译期间就能确定调用的版本, 包括: 调用静态方法, 调用实例的私有构造器, 私有方法, 父类方法

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文件中的常量池。因此,当一个类型被首次装载的时候,所有来自于类型的符号引用都装载到了类型的运行时常量池。

在程序运行的过程中,如果某个特定的符号引用将要被使用,它首先要被解析。解析过程就是首先根据符号引用查找到实体,再把符号引用替换成直接引用的过程。因为所有的符号引用都是保存在常量池中,所以这种解析叫做常量池解析。

最新文章

  1. 一个简易的四则运算单元...(15.12.15 BUG更新)
  2. DevExpress gridControl 设置分组
  3. QT 的下载地址
  4. homework 11 2016 5 13 读入文件做输入
  5. DDD:建模原语 之 四象图(转载的神文)
  6. oracle 新手遇到常见问题的解决办法
  7. 解决IE10以下对象不支持“bind”属性或方法
  8. JavaScript基础学习(四)—Object
  9. MyEclipse中查看struts_spring_hibernate源码
  10. java代码之美(2)---Java8 Stream
  11. spring boot中jsp解析c标签方法
  12. C# DES加密类,16位的加密。
  13. 测试开发学习进阶教程 视频&PDF
  14. expdp/impdp数据泵分区表导入太慢了。添加不检查元数据参数提高效率:ACCESS_METHOD=DIRECT_PATH
  15. Map中根据条件删除元素
  16. python必须要安装的库
  17. 学习笔记之ASP.NET MVC & MVVM & The Repository Pattern
  18. leetcode210
  19. 转载hibernate 的3种 状态 。。
  20. 170530、java 迭代hashmap常用的三种方法

热门文章

  1. POJ2553 强连通出度为0的应用
  2. hdu2155 小黑的镇魂曲(dp)
  3. Webshell和一句话木马
  4. UVA11991第k次出现的v的下标
  5. 推荐算法-聚类-K-MEANS
  6. SpringBoot程序后台运行
  7. 【】maven 配置启动tomcat版本,修改默认的6.x.x版本
  8. 【Linux】在centos中使用命令安装redis
  9. 中国排名前100的IC设计公司
  10. istio流量管理:非侵入式流量治理