🌈hello,你好鸭,我是Ethan,西安电子科技大学大三在读,很高兴你能来阅读。
✔️目前博客主要更新Java系列、项目案例、计算机必学四件套等。
🏃人生之义,在于追求,不在成败,勤通大道。加油呀!
🔥个人主页:Ethan Yankang
🔥推荐:史上最强八股文||一分钟看完我的几百篇博客
🔥温馨提示:划到文末发现专栏彩蛋 点击这里直接传送
🔥本篇概览:详细讲解了解释器与JIT编译器——执行引擎2🌈⭕🔥
【计算机领域一切迷惑的源头都是基本概念的模糊,算法除外】
🌈章节引出:
前一篇章:
《剑指JVM》——第11章——执行引擎的工作原理——执行引擎1-CSDN博客
🌈章节速览:
11.4 解释器
解释器的作用是当JVM启动时会根据预定义的规范对字节码采用逐行解释的方式执行,将每条字节码文件中的内容“翻译”为对应平台的机器码执行。
JVM 设计者的初衷是为了满足Java程序实现跨平台特性,因此避免采用静态编译的方式直接生成机器码,从而诞生了实现解释器在运行时采用逐行解释字节码执行程序的想法。如图11-8所示,如果不采用字节码文件的形式,我们就需要针对不同的平台(Windows、Linux、Mac)编译不同的机器指令,那么就需要耗费很多精力和时间;如果采用了字节码的形式,那么就只需要从源文件编译到字节码文件即可,虽然在不同的平台上,但是JVM 中的解释器可以识别同一套字节码文件,大大提高了开发效率。
解释器真正意义上所承担的角色就是一个运行时的“翻译者”,将字节码文件中的内容“翻译”为对应平台的机器码执行。
在Java的发展历史里,一共有两套解释执行器,分别是古老的字节码解释器和现在普遍使用的模板解释器。字节码解释器在执行时通过纯软件代码模拟字节码的执行,效率非常低下。而模板解释器将每一条字节码和一个模板函数相关联,模板函数中直接产生这条字节码执行时的机器码,从而很大程度上提高了解释器的性能。
技术面要广!!!
在HotSpot VM中,解释器主要由Interpreter 模块和 Code 模块构成。Interpreter 模块实现了解释器的核心功能,Code 模块用于管理 HotSpot VM 在运行时生成的机器码。
由于解释器在设计和实现上非常简单,因此除了Java语言之外,还有许多高级语言同样也是基于解释器执行的,比如 Python、Perl、Ruby等。
但是在今天,基于解释器执行已经沦落为低效的代名词。为了解决低效这个问题,JVM平台支持一种叫作即时编译的技术。即时编译的目的是避免函数被解释执行,而是将整个函数体编译成机器码,每次函数执行时,只执行编译后的机器码即可,这种方式可以使执行效率大幅度提升。不过无论如何,基于解释器的执行模式仍然为中间语言的发展做出了不可磨灭的贡献。
11.5JIT编译器
JIT 编译器(Just In Time Compiler)的作用就是虚拟机将字节码直接编译成机器码。但是现代虚拟机为了提高执行效率,会使用即时编译技术将方法编译成机器码后再执行。在JDK1.0时代,JVM 完全是解释执行的,随着技术的发展,现在主流的虚拟机中大都包含了即时编译器。
技术面要广
HotSpot VM 是目前市面上高性能虚拟机的代表作之一。它采用解释器与即时编译器并存的架构。在JVM运行时,解释器和即时编译器能够相互协作,各自取长补短,尽力去选择最合适的方式来权衡编译本地代码的时间和直接解释执行代码的时间。在此大家需要注意,无论是采用解释器进行解释执行,还是采用即时编译器进行编译执行,都是希望程序执行要快。最终字节码都需要被转换为对应平台的机器码。
下面这篇文章讲解了问什么JVM中会有解释器与JIT编译器共存。
💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖💖
热门专栏推荐
🌈🌈计算机科学入门系列 关注走一波💕💕
🌈🌈CSAPP深入理解计算机原理 关注走一波💕💕
🌈🌈微服务项目之黑马头条 关注走一波💕💕
🌈🌈redis深度项目之黑马点评 关注走一波💕💕
🌈🌈JAVA面试八股文系列专栏 关注走一波💕💕
🌈🌈JAVA基础试题集精讲 关注走一波💕💕
🌈🌈代码随想录精讲200题 关注走一波💕💕
总栏
🌈🌈JAVA基础要夯牢 关注走一波💕💕
🌈🌈JAVA后端技术栈 关注走一波💕💕
🌈🌈JAVA面试八股文 关注走一波💕💕
🌈🌈JAVA项目(含源码深度剖析) 关注走一波💕💕
🌈🌈计算机四件套 关注走一波💕💕
🌈🌈数据结构与算法 关注走一波💕💕
🌈🌈必知必会工具集 关注走一波💕💕
🌈🌈书籍网课笔记汇总 关注走一波💕💕
📣非常感谢你阅读到这里,如果这篇文章对你有帮助,希望能留下你的点赞👍 关注❤收藏✅ 评论💬,大佬三连必回哦!thanks!!!
📚愿大家都能学有所得,功不唐捐!