news 2026/9/26 4:55:47

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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函数中可以引发vtable的method

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
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/17 3:24:36

4. 为什么 Triton 不够了

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

作者头像 李华
网站建设 2026/9/17 3:24:28

LangGraph详解:构建智能代理工作流的新范式

目录 前言 什么是LangGraph? 核心概念 主要特性 与传统链式调用的对比 开始使用: LangGraph核心架构 状态管理 节点与边 条件边与循环 实战案例:构建智能客服工单处理系统 案例需求分析 系统实现 步骤1:定义状态结构…

作者头像 李华
网站建设 2026/9/25 14:41:47

Python+django的图书资料借阅信息管理系统的设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着信息化时代的快速发展,图书资料的管理效率成为图书馆和各类机构关注的重点。传统的纸质记录方式效率低下且容易…

作者头像 李华
网站建设 2026/9/25 3:12:42

STM32-270-多功能水质监测系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32-270-多功能水质监测系统(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 产品功能描述: 本系统由STM32F103C8T6单片机核心板、TFT1.44寸彩屏液晶显示电路、(无线蓝牙/无线WIFI/无线视频监控模块-可…

作者头像 李华
网站建设 2026/9/25 4:01:02

C语言:指针

吃透 C 语言指针:从本质到实战,告别 “指针恐惧症” 指针是 C 语言的灵魂,也是很多初学者入门路上的 “拦路虎”—— 有人觉得它晦涩难懂、容易出错,写代码时避之不及;也有人掌握后感叹其灵活高效,能轻松实…

作者头像 李华