news 2026/4/17 14:38:32

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

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

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

作者头像 李华
网站建设 2026/4/17 17:57:36

STM32-S184-车位感应+停车引导+闸道控制+车道防夹+计时计费+结算+OLED屏+声光报警+按键+(无线方式选择)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫

STM32-S184-车位感应停车引导闸道控制车道防夹计时计费结算OLED屏声光报警按键(无线方式选择)STM32-S184N无无线-无APP板(硬件操作详细): STM32-S184B蓝牙无线-APP版: STM32-S184W-WIFI无线-APP版: STM32-S184CAN-视频监控WIFI无线-APP版: STM32-S184I-云平台-APP版: 产品功能描…

作者头像 李华
网站建设 2026/4/18 2:00:01

特价股票与公司社会资本积累的长期关系

特价股票与公司社会资本积累的长期关系 关键词:特价股票、公司社会资本积累、长期关系、市场机制、企业价值 摘要:本文旨在深入探讨特价股票与公司社会资本积累之间的长期关系。通过对相关核心概念的解析,阐述了特价股票和公司社会资本的原理及架构。运用算法原理和数学模型…

作者头像 李华
网站建设 2026/4/18 2:02:27

Python+django的生鲜海鲜商城交易系统设计与实现没论文

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着电子商务的快速发展,生鲜海鲜产品的线上交易需求日益增长。传统的线下交易模式存在地域限制、价格不透明、物流…

作者头像 李华
网站建设 2026/4/18 2:07:29

Python+django的蔚来新能源汽车对比推荐平台设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 随着新能源汽车市场的快速发展,消费者在购车时面临众多选择,亟需专业化的对比推荐工具辅助决策。基于P…

作者头像 李华