前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >难怪我看不懂!call_stub竟然这么玄乎!

难怪我看不懂!call_stub竟然这么玄乎!

原创
作者头像
子牙老师
修改2022-05-09 12:35:17
3790
修改2022-05-09 12:35:17
举报
文章被收录于专栏:手写JVM专栏

哈喽,我是子牙。十余年技术生涯,一路披荆斩棘从技术小白到技术总监到JVM专家到创业。技术栈如汇编、C语言、C++、Windows内核、Linux内核。特别喜欢研究虚拟机底层实现,对JVM有深入研究。分享的文章偏硬核,很硬的那种。

手撸过JVM、内存池、垃圾回收算法、synchronized、线程池、NIO…

这样的硬核男人,怎么才能认识他?关注硬核子牙

聊点啥

这篇文章想跟大家聊聊Hotspot源码的call_stub,如图

这啥?这篇文章目前还不适合你,默默关掉吧,我理解的!

为什么要聊这个?我又看不懂!(白眼)给我硬看!

这个问题是卷Hotspot的小伙伴问得比较多的,每次回答就像顺藤摸瓜一样,小伙伴们顺着我的回答抛出一堆问题,我怕了,写篇文章把讲透吧,后面谁来问,这篇文章丢过去。看不懂?多看几遍!

坦白讲,就这么一段代码,涉及到的知识点还真不少:

  1. 函数指针
  2. 变量定义花招

铺垫知识

先说宏,比较简单,就两个知识点:

  1. 宏定义,通过#define定义
  2. 宏展开,预处理阶段直接替换

打个比方

这是比较简单的,有的宏定义就像函数一样,还传参,把人搞疯了!万变不离其宗,无脑替换就可以了。

接下来谈谈函数指针,这个一两句话讲不清,我就举个例子了

总结一下:函数指针的强大就在于它可以用来定义函数,这个函数你给它什么地址,它就把那块内存当成函数执行

如果这样说你还是不懂,百度一下吧

好,最后一个铺垫知识:花样定义变量

OK,万事具备,开始卷。

顺便提一嘴,我在做手写JVM小班,就是以手写JVM为契机教大家底层如:汇编、C、C++、操作系统…底层最重要的不是视频,而是老师本人在你遇到问题的时候能指点你。如果你想学习底层,想成为技术大牛,来找我。

开始卷

点开call_stub,是一个函数,长这样,函数体是一个宏

找到宏定义

手动展开

继续展开

还有一个碍事的CallStub,继续展开

最终结果

_call_stub_entry是什么?是JVM调用Java函数的那座桥。指向一段内存,这段内存代码在这生成的

这个函数,还有一个:entry_point,是看懂Hotspot运行时的关键。然,这两座大山将99%的人拒之门外。

当然,不包括我,我用内联汇编模拟写了一遍

OK,就到这里,清晰明了。

题外话

子牙手写JVM小班四期招生即将结束。四期新增了字节码增强+Agent,学完你就可以做JVM相关的工作,如二开arthas,自研类hsdb调试器、自研实现热更新热部署零侵入日志等黑科技…

四期完整课程包含七大专题+一个增值专题,约50多个课时。完整学完你就可以:1、用Java写一个Java虚拟机,从而深入理解运行系统的底层细节;2、有能力自行研究Hotspot源码及其他用C语言、C++写的中间件源码;3、能够用C语言、C++写任何你感兴趣的基础算法如:内存池、垃圾回收算法、主从同步算法、执行引擎、存储引擎;4、就有底子跟着我学习下半年准备开的操作系统内核班……

这套课程,横跨多个计算机学科,但只是一个学科的价格。这套课程,JVM专家、功力深厚、经验丰富的子牙老师亲授,跟我学习不踩坑,全网唯一教授虚拟机的课程…

感兴趣小伙伴可以加班班微信咨询(jvm-anan),真诚招生,无任何套路。课程试看,问题真诚解答,全部了解清楚再上车。一二三期共500多VIP加入,无一人退费,好评不断

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 聊点啥
  • 铺垫知识
  • 开始卷
  • 题外话
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档