news 2026/4/29 6:18:41

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/26 13:27:48

Linux软件安装 —— JDK安装

文章目录一、节点说明二、下载安装包三、检查/删除现有JDK四、安装一、节点说明 IP主机名192.168.10.102node02192.168.10.103node03192.168.10.104node04二、下载安装包 官网地址:Java Archive Downloads - Java SE 8u211 and later | Oracle 中国 本文安装版本…

作者头像 李华
网站建设 2026/4/28 8:11:13

8. vLLM vs TensorRT-LLM

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

作者头像 李华
网站建设 2026/4/28 16:26:23

YOLO26 全场景部署使用指南

一、前言:YOLO26 部署核心优势 YOLO26 作为 2025 年 9 月发布的新一代实时目标检测器,以「端到端部署友好、边缘设备适配、性能均衡」为核心定位,相比前代模型实现三大关键突破:一是移除 DFL 损失模块与 NMS 后处理,简…

作者头像 李华
网站建设 2026/4/25 1:59:49

Docker容器化实战:从入门到生产环境部署

前言 两年前,我们公司的部署流程是这样的:开发在本地调试好代码,打包发给运维,运维在服务器上配置环境,然后发现"在我机器上能跑"。 引入Docker后,一切都变了。这篇文章分享我们的容器化实践经…

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

Python+django的协同过滤算法的 美食菜谱推荐分享平台

目录协同过滤算法在美食菜谱推荐平台的应用系统功能与优化策略开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!协同过滤算法在美食菜谱推荐平台的应用 基于Python和Django框架的美食菜谱推荐…

作者头像 李华