JVM是如何基于虚拟机栈运行的

众所周知:JVM执行Java代码是靠执行引擎实现的。执行引擎有两套解释器:字节码解释器、模板解释器。字节码解释器比较简单,不多说,看图。本篇文章咱们讨论模板解释器执行Java代码的底层原理。

早些年研究模板解释器看到R大用汇编写的迷你版解释器,心里想:太特么牛叉了,我连怎么实现的都不知道,人家都写出来了,这差距。随着自己的努力,不断的研究沉淀,如今这些对我来说也不是那么难了。

R大写的解释器纯汇编,小伙伴们可能看不懂。你如果感兴趣可以看我写的,我用C++包装了汇编,理解门槛可能低很多。但是如果你真正的想学明白,还是得有熟练使用汇编的水平哈。关注公众号【硬核子牙】回复【执行引擎】,领取解释器代码。

本篇文章更近一层,不仅告诉你JVM的执行引擎是如何实现的,还会告诉你JVM的执行引擎是如何在OS的栈与自实现的栈之间来回切换完成程序运行的。小伙伴们感受到了吗,那种接近技术本质的兴奋感。

答案

如果你只想知道答案:JVM的执行引擎,即模板解释器。是通过在OS的栈与自实现的虚拟机栈来回切换完成执行Java程序的。看图

确实很抽象,打个比方吧:你想写一个很大的字,比如:牙。一张纸你觉得不够大,你搞了两张纸。写完以后是不是每张纸上都有一点,拼在一起才是一个字。这里的笔就是执行引擎,两张纸大家应该都GET到了,一张如OS栈,一张如JVM栈。

原理讲到这个程度,小白应该都听懂了吧。那你是否想知道这么牛叉的技术,是怎么实现的?不想的,面试讲到这个程度就很牛叉了,你也不用担心面试官会追问,他可能并不知道要问啥。想知道的小伙伴继续往后面看。

答案解析

核心是一个寄存器:SP。

解释下这个寄存器:操作系统栈有两个寄存器:BP、SP(不同CPU位数名称不同)。BP指向栈底,SP执行栈顶。切栈的核心就是切SP寄存器。切得不好很容易把系统搞死机哈。^_^

为什么会死机?程序讲究对称,你如果把线程引入了死胡同,它出不来,又不阻塞,又不结束,可不就死机了吗?哎,又教会了小伙伴一个离职小技巧。

上段代码再解释一下吧

图片

只能讲到这个份上了,再听不懂我也不知道怎么讲了。只剩下录视频一招了。如果你没看懂,留言告诉我。

这种技术称为栈编织技术。与其对应的是字节码编织技术、硬编码编织技术。

结语

我是子牙老师,喜欢钻研底层,深入研究Windows、Linux内核、JVM。喜欢分享硬核知识,如果你也喜欢研究底层,喜欢硬核知识,关注我。

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

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

相关文章

你知道vue中key的原理吗?说说你对它的理解

一、Key是什么 开始之前&#xff0c;我们先还原两个实际工作场景 当我们在使用v-for时&#xff0c;需要给单元加上key <ul><li v-for"item in items" :key"item.id">...</li> </ul>用new Date()生成的时间戳作为key&#xff0c…

数据中心网络架构

参考&#xff1a; 一文读懂胖树 数据中心网络架构VL2详解 数据中心网络拓扑设计目标 总体目标 业务可以部署在任意的服务器上可以根据需要动态扩展或者缩小服务器规模 网络角度 均衡负载且高性能&#xff1a;服务器之间的性能仅受限于服务器网卡&#xff0c;而不是链路性能…

《Ensemble deep learning: A review》阅读笔记

论文标题 《Ensemble deep learning: A review》 集成深度学习&#xff1a; 综述 作者 M.A. Ganaie 和 Minghui Hu 来自印度理工学院印多尔分校数学系和南洋理工大学电气与电子工程学院 本文写的大而全。 初读 摘要 集成学习思想&#xff1a; 结合几个单独的模型以获得…

【GitHub】ssh: connect to host github.com port 22: Connection refused

本地使用git上传GitHub仓库时发现的一个报错&#xff0c;以为是本机连不上github了&#xff0c;ping过后发现能够正常访问&#xff0c;于是上网找到了一个很完美的解决方案 原因&#xff1a;22端口被占用或被防火墙屏蔽 解决方法&#xff1a;切换GitHub的443端口 1.首先找到…

【数据结构】手撕排序(排序的概念及意义、直接插入和希尔排序的实现及分析)

目录 一、排序的概念及其运用 1.1排序的概念 1.2排序运用 1.3 常见的排序算法 二、插入排序 2.1基本思想&#xff1a; 2.2直接插入排序&#xff1a; 2.3步骤&#xff1a; 2.4直接插入排序的实现 三、希尔排序( 缩小增量排序 ) 3.1希尔排序的发展历史 3.2 希尔…

跟着cherno手搓游戏引擎【2】:日志系统spdlog和premake的使用

配置&#xff1a; 日志库文件github&#xff1a; GitHub - gabime/spdlog: Fast C logging library. 新建vendor文件夹 将下载好的spdlog放入 配置YOTOEngine的附加包含目录&#xff1a; 配置Sandbox的附加包含目录&#xff1a; 包装spdlog&#xff1a; 在YOTO文件夹下创建…

研讨会分享 | 非遗文化的守正创新与数字化传播

12月17日&#xff0c;大势智慧受邀参与由南方科技大学创新创意设计学院&#xff08;以下简称“设计学院”&#xff09;举办的“非遗文化的守正创新与数字化传播”主题研讨会&#xff0c;与来自非遗、文化、设计、展陈、技术等领域的一众专家学者&#xff0c;共同探讨可持续视阈…

如何充值GPT会员账号?

详情点击链接&#xff1a;如何充值GPT会员账号&#xff1f; 一OpenAI 1.最新大模型GPT-4 Turbo 2.最新发布的高级数据分析&#xff0c;AI画图&#xff0c;图像识别&#xff0c;文档API 3.GPT Store 4.从0到1创建自己的GPT应用 5. 模型Gemini以及大模型Claude2二定制自己的…

nginx 一、安装与conf浅析

文章目录 一、安装nginxdocker方式安装linux方式安装Ubuntu 或 Debian 系统&#xff1a;CentOS 或 RHEL 系统&#xff1a; macOS 系统&#xff08;使用 Homebrew&#xff09;&#xff1a;Windows 系统&#xff1a; 二、nginx.conf浅析 一、安装nginx docker方式安装 docker s…

2024年Vue开发中的8个最佳工具

前言 Vue.js&#xff0c;一款当今非常流行的基于JavaScript的开源框架&#xff0c;旨在构建动态的可交互应用。 Vue.js以其直观的语法和灵活的架构而广受全球开发者的欢迎和赞誉。随着时间的推移&#xff0c;Vue不断进化&#xff0c;为开发者提供更多优秀的工具&#xff0c;以…

深度学习 Day23——J3DenseNet算法实战与解析

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制&#x1f680; 文章来源&#xff1a;K同学的学习圈子 文章目录 前言1 我的环境2 pytorch实现DenseNet算法2.1 前期准备2.1.1 引入库2.1.2 设…