JVM(八)执行引擎相关内容】的更多相关文章

一:两种解释器 JAVA字节码解释器: java字节码===>c++代码==>硬编码. 首先.java文件编译成字节码,遍历每行的字节码指令,因为每个字节码指令的含义都是固定的所以可以根据每行字节码指令来转成c++代码调用,最后转成硬编码(机器码)来执行. 模板解释器: 由java字节码==>硬编码.可以从java字节码直接到硬编码. 模板解释器底层实现流程: 1)申请一块内存:可读可写可执行 2)将处理new字节码的硬编码(举个例子)拿过来,可以通过解析文件得到 3)将处理new字节码…
Java虚拟机只与Class文件相关联,它规定了Class文件应该具有的格式,而不论该文件是由什么语言编写并编译而来.所以,任何语言只要能够最终编译成符合Java虚拟机要求的Class文件,就可以运行在Java虚拟机上面.就是说,不论是使用Java, Scala, Kotlin, Groovy还是其他语言,只要编译出的Class文件符合虚拟机规范,那么都可以被虚拟机执行.所以,实际上Java规范就是由Java语言规范和Java虚拟机规范两个独立的部分组成. Class类文件是一种二进制文件,它包…
JVM调优工具 Jconsole,jProfile,VisualVM Jconsole : jdk自带,功能简单,但是可以在系统有一定负荷的情况下使用.对垃圾回收算法有很详细的跟踪.详细说明参考这里 JProfiler:商业软件,需要付费.功能强大.详细说明参考这里 VisualVM:JDK自带,功能强大,与JProfiler类似.推荐. 如何调优 观察内存释放情况.集合类检查.对象树 上面这些调优工具都提供了强大的功能,但是总的来说一般分为以下几类功能 堆信息查看 可查看堆空间大小分配(年轻代…
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 执行引擎是Java虚拟机中的核心组成部分. 执行引擎的作用就是解析虚拟机字节码指令,即执行一条条的代码流程,并得到执行结果. 我们可以先来看一下执行引擎在Java虚拟机中的位置, 可以看出,一个Java线程就是一个执行引擎的实例.则在一个JVM实例中就会有很多个执行引擎在工作,可能有的在执行我们编写的应用程序,有的在执行JVM内部程序,如垃圾收集器等. 1.执行引擎的工作过程 "虚…
前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 GIthub 博客 学习导图 一.为什么要学习字节码执行引擎? 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步 首先,抛出灵魂三问: 虚拟机在执行代码的时候,如何找到正确的方法呢? 如何执行方法内的字节码呢? 执行代码时涉及的内存结构有哪些呢? 如果你对上述问题理解得还不是特别透彻的话,可以看下这篇文章:如果理解了,你可以关闭网页,打开游戏放松了hhh 下面,笔者将带你探究 J…
一.JVM通过执行引擎来完成字节码的执行,在执行过程中JVM采用的是自己的一套指令系统,每个线程在创建后,都会产生一个程序计数器(pc)和栈(Stack). pc:存放了下一条将要执行的指令: Stack:存放Stack Frame(栈帧),最上面的表示为当前正在执行的方法.每个方法的执行都会产生Stack Frame,Stack Frame中存放了传递给方法的参数.方法内的局部变量以及操作数栈: 局部变量表:存放参数.局部变量: 操作数栈:存放指令运算的中间结果: 指令负责从操作数栈中弹出参与…
字节码是什么东西? 以下是百度的解释: 字节码(Byte-code)是一种包含执行程序.由一序列 op 代码/数据对组成的二进制文件.字节码是一种中间码,它比机器码更抽象. 它经常被看作是包含一个执行程序的二进制文件,更像一个对象模型.字节码被这样叫是因为通常每个 opcode 是一字节长, 但是指令码的长度是变化的.每个指令有从 0 到 255(或十六进制的: 00 到FF)的一字节操作码,被参数例如寄存器或内存地址跟随. 说了这么多,你可能还是不明白到底是什么东西.好吧,简单点,就是java…
执行引擎 关于执行引擎相关的部分, 在之前的博文里 Java内存区域中已经有所提及. 回顾一下: 也只有几个概念, JVM方法调用和执行的基础数据结构是 栈帧, 是内存区域中 虚拟机栈中的栈元素, 每一个方法的执行就对应着一个栈帧在虚拟机栈中出栈入栈的过程. 栈帧:则是包含有局部变量表, 操作数栈, 动态连接, 方法返回地址, 附加信息. 局部变量表: 存储单位是 slot, 一个slot占据32位, 对于64位的数据类型, 则是分配连续两个slot空间. 而对于一个非静态方法而言, 有一个隐藏…
执行引擎是Java虚拟机的核心组成部分之一. 首先,想想C++和Java在编译和运行时到底有啥不一样? 下图左边,C++发布的就是机器指令, 而下图右边Java发布的是字节码,字节码在运行时通过JVM的类加载器,加载到JVM的虚拟内存的方法区, 再通过编译器.解释器做一次转换生成机器指令.执行引擎正是执行了这样的过程:输入的是内存中的字节码,处理过程是字节码解析的 等效过程,输出的是执行结果. 其次,再来看下图,JVM的内存结构: 一.执行方法. 每个线程在创建后,都会产生一个程序计数器(pc)…
JVM字节码执行引擎 运行时栈帧结构 局部变量表 操作数栈 动态连接 方法返回地址 附加信息 方法调用 解析 分派 –“重载”和“重写”的实现 静态分派 动态分派 单分派和多分派 JVM动态分派的实现 基于栈的字节码解释执行引擎 基于栈的指令集与基于寄存器的指令集 JVM字节码执行引擎 虚拟机是相对于“物理机”而言的,这两种机器都有代码执行能力,其区别主要是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而虚拟机的执行引擎是自己实现的.因此程序员可以自行制定指令集和执行引擎的…