JVM中有两种解释器
1.C++字节码解释器:使用C++代码模拟JVM指令,例如iload,istore等

2.模板解释器(JIT编译器):将程序中固定不变的指令,或者常用的代码段,翻译成机器代码,保存到一个队列(StubQueue)中,执行的时候,直接执行汇编代码即可

固定不变:我们每天都遇到的NullPointException,就会被翻译成机器代码,我们都知道,无论是我的程序,还是你的程序,这个NullPointException都是相同的,所以不管三七二十一,直接翻译成机器代码即可

热点代码:我程序中的业务代码,和你程序中的业务代码是不同的,那么不同程序中的热点(常用)代码肯定也不相同,那么JVM如何区分出哪些业务代码是常用的代码呢?

执行引擎的4种运行模式

1.一次性解释模式(C++字节码解释器):类加载器将源码编译成jvm指令(iload,istore等),然后由模板解释器执行这些jvm指令并计算结果,缺点是效率低

2.编译模式(使用模板解释器/使用即时编译JIT编译器):将字节码指令翻译成机器码,并缓存起来,缺点是机器码占内存,因为很有可能1条jvm指令=10条机器指令

3.混合模式:由1和2的缺点综合考量,使用混合模式,正常情况下使用模板解释器执行jvm代码,对于一些常用的(热点)jvm代码段,则采用JIT编译器,将其机器码缓存到jvm内部(这也是hotspot虚拟机的本体)

4.本地方法执行Java字节码,很少见

Java-虚拟机-执行引擎/解释器/编译相关推荐

  1. Java虚拟机执行引擎多态的实现

    在java中多态的表现为:重写(override)和重载(overload) 重载(overload 就是在同一个类中写多个方法名相同的方法)是java的静态分派: Java方法重载是根据传入参数的数 ...

  2. 【Java】实战Java虚拟机之五“开启JIT编译”

    今天开始实战Java虚拟机之五"开启JIT编译" 总计有5个系列 实战Java虚拟机之一"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式&qu ...

  3. Java 虚拟机执行子系统

    JVM执行子系统的作用 在当前的Java中,编译器将源代码转成字节码后,字节码通过JVM的字节码执行引擎被执行,执行引擎负责具体的代码调用及执行过程.主要通过输入字节码文件,解析输入字节码,最后输出执 ...

  4. Android ART虚拟机执行引擎-Interpreter(八)

    ART虚拟机是一个Interpreter+JIT+AOT的共存环境. ART虚拟机中解释器的实现源码在art/runtime/interpreter中,其中与平台相关的汇编代码保存在目录art/run ...

  5. 深入理解Java虚拟机(周志明第三版)- 第八章:虚拟机字节码执行引擎

    系列文章目录 第一章: 走近Java 第二章: Java内存区域与内存溢出异常 第三章: Java垃圾收集器与内存分配策略 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言 ...

  6. 虚拟机字节码执行引擎

    1 概述 执行引擎是Java虚拟机核心的组成部分之一."虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处 ...

  7. 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)读书笔记

    前言 我在读 深入理解java虚拟机 这本书,把整体其中的关键点标记了,希望自己对它有个不一样的理解,也希望大家能看看这本写的很好的书 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版) pd ...

  8. java 参数类型不确定_详细解析Java虚拟机的栈帧结构

    什么是栈帧? 正如大家所了解的,Java虚拟机的内存区域被划分为程序计数器.虚拟机栈.本地方法栈.堆和方法区.(什么?你还不知道,赶紧去看看<Java虚拟机内存结构及编码实战>)这次要介绍 ...

  9. java虚拟机栈帧_Java虚拟机,运行时栈帧结构

    业余生活要有意义,不要越轨.--华盛顿 引导语 "虚拟机"是一个相对于"物理机"的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器. ...

最新文章

  1. 中标麒麟7.0安装Unity、Qt等
  2. NDK其他build变量
  3. Gitlab禁用Gravatar头像
  4. FFMPEG音视频解码
  5. 如何用Postman做接口测试
  6. python 如何边改代码边调试_Python 代码调试神器:PySnooper
  7. php连接mysql开发环境_PHP开发环境搭建及常用的数据库操作
  8. 经验总结 | PyCharm 详细使用指南!
  9. linux中内存挂载到目录下
  10. x·dy+y²·sinx·dx=0
  11. Irrlicht例002--Quake3Map
  12. caffe 实践程序2——用细分的方法实现caffe中cifar100的识别
  13. java调用js tel,jQuery国际电话区号选择插件intlTelInput.js
  14. 你为什么要进入IT行业呢?
  15. 很全!国内外网络安全厂商有哪些?
  16. 街头篮球手游服务器维护,街头篮球手游2017.6.22维护更新公告 宝箱位置调整更新一览...
  17. 计算机组成原理一篇过
  18. 计算机启动慢,win7开机速度慢怎么办_win7开机启动慢怎么解决-win7之家
  19. 共享计算机添加打印机后无法打印机驱动,打印机无法打印原因?打印机设置共享的方法...
  20. 5G和车联网的本质联系

热门文章

  1. linux rsync 目录同步,Linux rsync网站目录同步功能的实现
  2. 使用静态容器防止并发修改同一对象
  3. android论文引用图片,Android自动解析html带图片,实现图文混排
  4. java托盘图标变白在linux,升级Ubuntu后系统托盘图标消失
  5. maven clean警告:The requested profile “pom.xml“ could not be activated because it does not exist
  6. apache-maven仓库配置
  7. Android开发笔记(十一)自定义视图的构造方法
  8. 对应猎豹网校的lua 视频教程 做的学习记录 前三课简单介绍1-3
  9. (三)Redis两种持久化方案
  10. php获取远程图片模拟post,file上传到指定服务器