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。喜欢分享硬核知识,如果你也喜欢研究底层,喜欢硬核知识,关注我。

相关推荐

  1. JVM虚拟动态链接部分存放到底什么

    2024-01-03 17:52:02       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-03 17:52:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-03 17:52:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-03 17:52:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-03 17:52:02       20 阅读

热门阅读

  1. 解决vim退格键无法使用问题

    2024-01-03 17:52:02       40 阅读
  2. uView-UI v2.x常见问题整理

    2024-01-03 17:52:02       37 阅读
  3. 啊哈c语言——逻辑挑战7:奔跑的小人

    2024-01-03 17:52:02       30 阅读
  4. vscode编写python步骤

    2024-01-03 17:52:02       36 阅读
  5. 【linux】echo命令踩坑详解

    2024-01-03 17:52:02       36 阅读
  6. Linux:磁盘分区

    2024-01-03 17:52:02       34 阅读
  7. 【算法题】30. 串联所有单词的子串

    2024-01-03 17:52:02       31 阅读
  8. H12-831_265

    2024-01-03 17:52:02       36 阅读
  9. 塔夫特原则

    2024-01-03 17:52:02       46 阅读
  10. 数字孪生项目中的导航片及寻路实现算法的探索

    2024-01-03 17:52:02       38 阅读
  11. Unity 关于点击不同物品移动并触发不同事件

    2024-01-03 17:52:02       40 阅读