JVM 字节码执行实例分析】的更多相关文章

前言 最近在看<Java 虚拟机规范>和<深入理解JVM虚拟机>,对于字节码的执行有了进一步的了解.字节码就像是汇编语言,是 JVM 的指令集.下面我们先对 JVM 执行引擎做一下简单介绍,然后根据实例分析 JVM 字节码的执行过程.包括: for 循环字节码分析 try-catch-finally 字节码分析 运行时栈帧结构 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈的栈元素.栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地…
JVM字节码执行引擎 运行时栈帧结构 局部变量表 操作数栈 动态连接 方法返回地址 附加信息 方法调用 解析 分派 –“重载”和“重写”的实现 静态分派 动态分派 单分派和多分派 JVM动态分派的实现 基于栈的字节码解释执行引擎 基于栈的指令集与基于寄存器的指令集 JVM字节码执行引擎 虚拟机是相对于“物理机”而言的,这两种机器都有代码执行能力,其区别主要是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而虚拟机的执行引擎是自己实现的.因此程序员可以自行制定指令集和执行引擎的…
前言 本文已经收录到我的 Github 个人博客,欢迎大佬们光临寒舍: 我的 GIthub 博客 学习导图 一.为什么要学习字节码执行引擎? 代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步 首先,抛出灵魂三问: 虚拟机在执行代码的时候,如何找到正确的方法呢? 如何执行方法内的字节码呢? 执行代码时涉及的内存结构有哪些呢? 如果你对上述问题理解得还不是特别透彻的话,可以看下这篇文章:如果理解了,你可以关闭网页,打开游戏放松了hhh 下面,笔者将带你探究 J…
Java 重写(Override)与重载(Overload) 重写(Override) 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是说子类能够根据需要实现父类的方法. 重载(Overload) 重载(overloading) 是在一个类里面,方法名字相同,而参数不同.返回类型可以相同也可以不同. 每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表. 方法的重写…
原文地址:http://yhjhappy234.blog.163.com/blog/static/3163283220122204355694/ 前面我们不止一次的提到,Java是一种跨平台的语言,为什么可以跨平台,因为我们编译的结果是中间代码—字节码,而不是机器码,那字节码在整个Java平台扮演着什么样的角色的呢?JDK1.2之前对应的结构图如下所示: 从JDK1.2开始,迫于Java运行始终笔C++慢的压力,JVM的结构也慢慢发生了一些变化,JVM在某些场景下可以操作一定的硬件平台,一些核心…
1.执行引擎 所有Java虚拟机的执行引擎都是一致的: 输入的是字节码文件,处理过程就是解析过程,最后输出执行结果. 在整个过程不同的数据在不同的结构中进行处理. 2.栈帧 jvm进行方法调用和方法执行的数据结构,是虚拟机栈的元素. (图片来自网络) 栈帧包括:局部变量表.操作数栈.动态链接.方法返回地址等 编译期就确定了需要多大的局部变量表,多深的操作数栈,这些信息全在字节码中. 只有位于栈顶的栈帧才有效,称为当前栈帧,所对应的方法就是当前正在执行的方法. 2.1 局部变量表 存放方法参数和方…
“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上,而虚拟机的执行引擎是 由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式. 运行栈帧结构 栈帧,是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈的栈元素.栈帧存储包括了局部变量.操作数栈.动态连接.方法返回地址和 一些额外的附件信息.在编译代码的时候,栈帧需要多大的局部变…
一.概述 在不同的虚拟机实现里面,执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译器执行(通过即时编译器产生本地代码执行)两种选择,所有的Java虚拟机的执行引擎都是一致的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果. 每个字节码指令都由一个1字节的操作码和附加的操作数组成. 二.运行时栈帧结构 栈帧(Frame Frame)是用于支持虚拟机运行方法调用和执行的数据结构,每一个栈帧都包括了局部变量表.操作数栈.动态链接.方法返回地址和一些额外的附…
动态类型语言 动态类型语言的关键特征是它的类型检查的主体过程是在运行期而不是编译期. 举例子解释“类型检查”,例如代码: obj.println("hello world"); 假如这行代码是在Java语言中,并且变量obj的静态类型为java.io.PrintStream,那么变量obj的实际类型就必须是PrintStream的子类才是合法.否则,obj属于一个确实 有println(String)方法,单与PrintStream接口没有继承关系,代码依然不可能运行——因为类型检查不…
一.执行引擎      “虚拟机”的概念是相对于“物理机”而言的,这两种“机器”都有执行代码的能力.物理机的执行引擎是直接建立在硬件处理器.物理寄存器.指令集和操作系统层面的:而“虚拟机”的执行引擎是自己实现的,因此可以自定义指令集和执行引擎的结构体系,而且可以执行那些不能被硬件直接支持的指令. 在不同的“虚拟机”实现里面,执行引擎在执行JAVA代码的时候有两种方式:解析实行(通过解释器执行)和编译执行(通过即时编译器编译成本地代码执行). 二.运行时数据结构 栈帧       栈帧是用于支持虚…