hotspot中的Java类对象如何保存虚函数

hotspot中的Java类对象如何保存虚函数
  • 定义

在Java中,几乎所有可被继承的函数被称为虚函数。

In HotSpot, a virtual method is essentially: Any non-static, non-private, non-final instance method whose invocation target is determined at runtime based on the actual class of the object.

还是以Dog类为例

public class Dog implements Animal { ... public String speak(){ return "Woof!"; } ... }

这里的speak()函数就是Java的虚函数,编译后的字节码文件也使用invokevirual字节码来执行该函数

27: invokevirtual #53 // Method speak:()Ljava/lang/String;

在《Java虚拟机规范》上对invokevirtual的解释如下

Invoke instance method; dispatch based on class
  • Klass中虚函数字段

在hotspot中使用Klass的虚函数使用vtable()来描述

class Klass : public Metadata { ... protected: // vtable length int _vtable_len; // vtables klassVtable vtable() const;//返回KlassVtable对象 ... }

在hotspot解析字节码的函数部分中会筛选出虚函数部分

#0 klassVtable::compute_vtable_size_and_num_mirandas ( #1 0x00007ffff61b1927 in ClassFileParser::post_process_parsed_stream ( #2 0x00007ffff61afcf0 in ClassFileParser::ClassFileParser (

void klassVtable::compute_vtable_size_and_num_mirandas函数中根据函数的访问权限找出虚函数

void klassVtable::compute_vtable_size_and_num_mirandas( ... if (needs_new_vtable_entry(method, super, classloader, classname, class_flags, major_version)) {//判断的昂前函数是否为虚函数 ... vtable_length += vtableEntry::size(); // we need a new entry } ... }

我们现在针对java/lang/Object进行gdb调试,我们来看看needs_new_vtable_entry函数中可以引发vtablemethod

Thread 2 "java" hit Breakpoint 4, klassVtable::compute_vtable_size_and_num_mirandas (vtable_length_ret=0x7ffff59fdf28, num_new_mirandas=0x7ffff59fdf30, all_mirandas=0x7ffff0034af0, super=0x0, methods=0x7fffe8800460, class_flags=..., major_version=61, classloader=..., classname=0x7ffff40210f0, local_interfaces=0x7fffe8800058) at /home/jx/src

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

冥想第一千七百六十七天(1767)

1.今天早上去跑步,然后就去了那个,然后高速后面那个地方,然后早上的时候那个地方没有人,不过在路上碰到了一个人有点怪异,就是他,然后对着电线杆,然后一直看不到脸我看到的时候他一直低着头&…

强烈安利9个AI论文写作软件,本科生论文无忧!

强烈安利9个AI论文写作软件,本科生论文无忧! 1.「千笔」—— 一站式学术支持“专家”,从初稿到降重一步到位(推荐指数:★★★★★)在论文写作过程中,很多本科生常常面临查重率高、内容重复、语言…

缓存 --- Redis缓存的一致性

缓存 --- Redis缓存的一致性核心问题:更新数据库与缓存的顺序抉择方案一:直接更新缓存(不推荐)方案二:删除缓存(让缓存失效,推荐)进阶优化:解决极端场景下的一致性问题各…

Gemini认证失败?一文搞定所有疑难

Gemini认证疑难解答会技术文章大纲认证前的准备工作确保已安装最新版本的Gemini客户端或SDK 检查系统环境是否符合Gemini运行要求 确认网络连接稳定且能访问Gemini服务端常见认证失败原因分析API密钥无效或过期导致认证被拒绝 请求频率超出配额限制触发系统保护 时间戳偏差过大…

7. 为什么云厂商集体选择 vLLM

作者:HOS(安全风信子) 日期:2026-01-17 来源平台:GitHub 摘要: 2026年,AWS、阿里云、字节跳动等全球顶级云厂商纷纷选择vLLM作为其大模型推理的核心框架。本文深入分析了云厂商集体选择vLLM的原因,包括高吞…

CF1781F Bracket Insertion

有一个空括号串 \(s\),接下来进行 \(n\) 次操作:假设当前括号序列长度为 \(l\),则在产生的 \(l+1\) 个空位中随机选择一个在当前空位以 \(p\) 的概率插入 \(\texttt{()}\),以 \(1-p\) 的概率插入 \(\texttt{)(}\)求…

8. vLLM vs TensorRT-LLM

作者:HOS(安全风信子) 日期:2026-01-17 来源平台:GitHub 摘要: 2026年,vLLM和TensorRT-LLM是NVIDIA生态中最主流的两大推理框架。本文深入对比了vLLM与TensorRT-LLM的优劣,包括vLLM的灵活调度优势和TensorR…

如何配置Dev-C++使用特定的编译器版本?

在 Dev-C 中配置特定编译器版本需要手动操作,以下是详细步骤:1. 安装目标编译器版本下载所需版本的编译器(如 MinGW 的特定 GCC 版本)解压至独立目录(例如:D:\MinGW-13.1)2. 配置 Dev-C打开工具…

深入解析:浏览器底层探秘:Chrome的奇妙世界

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

4. 为什么 Triton 不够了

作者:HOS(安全风信子) 日期:2026-01-17 来源平台:GitHub 摘要: 2026年,随着大模型规模和复杂度的急剧增长,传统推理框架Triton Inference Server在处理现代推理场景时逐渐显现出局限性。本文深入剖析了Trit…

如何在Dev-C++中设置编译器参数?

在Dev-C中设置编译器参数,可以通过以下步骤操作:1. 打开编译器设置点击顶部菜单栏的 "工具(Tools)" → 选择 "编译器选项(Compiler Options)"。2. 设置全局编译器参数在打开的窗口中:"编译器(Compiler)" 选项卡…

day143—递归—对称二叉树(LeetCode-101)

题目描述给你一个二叉树的根节点 root , 检查它是否轴对称。示例 1:输入:root [1,2,2,3,4,4,3] 输出:true示例 2:输入:root [1,2,2,null,3,null,3] 输出:false提示:树中节点数目在…

5. vLLM 出现前的推理地狱

作者:HOS(安全风信子) 日期:2026-01-17 来源平台:GitHub 摘要: 2023年vLLM出现之前,大模型推理面临着显存碎片化、低效调度和高延迟等诸多挑战,被称为"推理地狱"。本文通过回顾pre-vLLM时代的痛点…

MCC音频剪辑工具v1.1.0.0:自动处理配音气口间隙 - 教程

MCC音频剪辑工具v1.1.0.0:自动处理配音气口间隙 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

6. PagedAttention 的历史背景

作者:HOS(安全风信子) 日期:2026-01-17 来源平台:GitHub 摘要: PagedAttention技术是vLLM的核心创新,它借鉴了操作系统中的虚拟内存分页管理思想,革命性地解决了大模型推理中的显存碎片化问题。本文追溯了P…

数据湖与数据仓库的演进与未来:一场技术辩论

内容:节目摘要 简介数据湖的未来两个技术栈会合二为一吗?数据网格:去中心化团队,统一架构?现代数据栈的下一个用例延迟:我们需要多低? 数据湖与仓库、分析与AI/ML、SQL与万物…… 随着数据湖和数…

RNR-Map:为视觉导航构建“可渲染”的新型视觉导航地图 - MKT

RNR-Map:为视觉导航构建“可渲染”的新型视觉导航地图https://mp.weixin.qq.com/s/5dFbWpGX8BeJwNt_MGIv-A 在视觉导航任务中,智能体(机器人)如何有效地存储和利用空间记忆是核心难题。传统的地图表征,如占据栅格…

全网最全MBA开题报告TOP8一键生成论文工具测评

全网最全MBA开题报告TOP8一键生成论文工具测评 2026年MBA开题报告写作工具测评:为何需要这份榜单? 随着MBA学习的深入,开题报告成为每位学生必须面对的重要环节。然而,从选题构思到资料整理、框架搭建,再到内容撰写与格…

2. 训练 vs 推理:真正烧钱的是哪一步

作者:HOS(安全风信子) 日期:2026-01-17 来源平台:GitHub 摘要: 2026年,AI行业的成本结构已经发生根本性转变。本文通过云厂商真实数据揭示,推理的累计成本已超过训练10倍以上,成为真正烧钱的环节…

win10 电脑 蓝牙耳机连接后没有声音

win10 电脑 蓝牙耳机连接后没有声音win10系统 技嘉z790m 冰雕主板 症状如下 蓝牙耳机有时连不上,有时连上了没有任何声音。 操作 设备管理器里把蓝牙下的所有项全部删除,然后重装。 没用 驱动总裁,技嘉官网重新下载…