讲师中心 微信公众号
AI工具推荐 视频效率加速

栈帧的动态链接:符号引用如何转为直接引用

雨敏君_3446

雨敏君_3446

发布时间:2026-07-17 06:24:27

|

279人浏览过

|

来源于php中文网

原创

动态链接是将编译期符号引用(如java/lang/String.toString:()Ljava/lang/String;)按需转换为运行时直接引用(如方法区入口地址)的过程;静态链接在类加载解析阶段完成invokestatic等指令,动态链接则在首次调用时通过vtable/itable查证invokevirtual等指令,invokedynamic最晚绑定;栈帧仅存常量池索引指针,执行时才查证并生成直接引用。

栈帧的动态链接:符号引用如何转为直接引用

栈帧里的动态链接,不是把一串字符串直接“翻译”成地址,而是靠一套按需触发、分阶段查证的机制,把编译期留下的符号引用,变成运行时能跳转的直接引用。

符号引用和直接引用到底是什么

符号引用是编译期写死在常量池里的“描述”,比如 java/lang/String.toString:()Ljava/lang/String; ——它只说“找 String 类的 toString 方法”,不关心这个方法现在在哪块内存;直接引用则是运行时能用的“定位”,可能是一个方法区里的入口地址、对象字段的内存偏移量,或者一个指向已加载类的句柄。

两者之间没有固定映射表,转换依赖类是否已加载、是否初始化、目标方法能否被重写等实时状态。

什么时候转:静态链接和动态链接分两拨处理

  • 类加载解析阶段就搞定的:invokestatic、invokespecial(构造器/私有方法)、final 方法。它们的目标唯一,JVM 在解析阶段就把常量池里的符号引用替换成真实地址,后续调用直接跳转。
  • 等到第一次调用才查的:invokevirtual 和 invokeinterface。比如 animal.eat(),此时 animal 实际是 Dog 还是 Cat 还没定,必须等运行时拿到对象的真实类型,再查它的虚方法表(vtable)或接口方法表(itable),才能确定 eat() 的具体实现入口。
  • 完全延迟到执行时的:invokedynamic。首次执行会触发 BootstrapMethod,生成 CallSite 并缓存目标方法,之后直接跳转——这是最灵活也最晚绑定的动态链接形式。

栈帧里存的不是地址,而是一个“常量池索引指针”

每个栈帧的动态链接部分,并不保存方法名字符串,也不保存最终地址,只保存一个轻量级引用:指向当前方法所属类的运行时常量池。

当字节码执行到 invokevirtual #25 时,JVM 就靠这个引用,快速定位到当前类的运行时常量池第 25 项,取出里面的符号引用,再走上面说的查类型、验权限、填 vtable 等步骤,最终生成可执行的直接引用。

这种设计让字节码指令通用、轻量,也支持多态调用的底层灵活性。

怎么验证这个过程在发生

用 javap -v YourClass.class 查看:

  • 在 Constant pool 里找到类似 #36 = Methodref #37.#38 的条目——这就是符号引用;
  • 在字节码中找到 invokevirtual #36 这样的指令——说明这条调用要靠动态链接来落地;
  • 如果该方法是 final 或 static,基本能在类加载日志里看到 “resolved method”;如果是普通实例方法,首次调用时 JVM 会做 vtable 填充,之后调用就走缓存路径。

不复杂但容易忽略。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

5607

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2428

2023.08.10

剧云AI短剧创作教程合集
剧云AI短剧创作教程合集

本专题聚焦剧云AI短剧创作,讲解从短剧灵感、梗概、全局大纲到分集、分场和正文的完整流程及节奏设计方法。

0

2026.10.14

剧云AI剧本创作零基础入门
剧云AI剧本创作零基础入门

本专题系统讲解剧云AI剧本创作流程,涵盖灵感、梗概、大纲、分场与正文生成,帮助新手快速完成首个中文剧本项目。

0

2026.10.14

VibeKnow文档转视频操作指南
VibeKnow文档转视频操作指南

本专题讲解VibeKnow上传Word、TXT、Markdown等材料生成视频的方法,覆盖内容解析、脚本组织、画面生成与成片检查。

0

2026.10.14

VibeKnow知识视频制作与导出详解
VibeKnow知识视频制作与导出详解

本专题整理VibeKnow从注册、素材上传、AI生成到预览导出的完整操作,帮助新手快速制作第一条知识讲解视频。

0

2026.10.14

二狗PPT大纲编辑实操指南
二狗PPT大纲编辑实操指南

本专题聚焦二狗PPT结构化大纲的生成和修改,讲解标题、正文、目录、页数与页面顺序的调整方法,提升汇报逻辑和内容完整性。

0

2026.10.14

二狗PPT文档转PPT全教程
二狗PPT文档转PPT全教程

本专题讲解二狗PPT解析Word、PDF、Excel和PPT资料的方法,涵盖文件上传、内容提取、大纲整理、异常处理与转换后校对。

0

2026.10.14

讯飞绘文全功能使用教程
讯飞绘文全功能使用教程

本专题系统整理讯飞绘文官网入口、注册登录、工作台及内容创作流程,帮助用户熟悉常用功能,快速完成首篇图文内容。

0

2026.10.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
JavaScript OOP调试技巧视频教程
JavaScript OOP调试技巧视频教程

共5课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn