bboyjing's blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 公益404
bboyjing's blog

自己动手写JVM二十七【数组和字符串(二)】

发表于 2017-03-01 | 分类于 JVM

本节继续来学习数组相关指令。

数组相关指令

<t>aload指令

<t>aload系列指令按索引取元素的值,然后推入操作数栈,其实现代码位于/instructions/loads/xaload.go文件中,其中一共有8条指令,代码基本相似,下面以aaload指令来详细看下:

阅读全文 »
bboyjing's blog

自己动手写JVM二十六【数组和字符串(一)】

发表于 2017-02-23 | 分类于 JVM

在大部分编程语言中,数组和字符串都是最基本的数据类型。Java虚拟机直接支持数组,对字符串的支持则由java.lang.String和相关的类提供。本章就来学习数组和字符串相关指令。

数组概述

数组在Java虚拟机中是个比较特殊的概念。为什么这么说呢,有下面几个原因:

阅读全文 »
bboyjing's blog

自己动手写JVM二十五【方法调用和返回(三)】

发表于 2017-02-22 | 分类于 JVM

本节继续实现方法调用和返回。

测试

首先要改造命令行工具,增加两个选项。java命令提供-verbose:class选项,可以控制是否把类加载信息输出到控制台。另外参照这个选项增加一个-verbose:inst选项,用来控制是否把指令执行信息输出到控制台,下面是测试步骤:

阅读全文 »
bboyjing's blog

自己动手写JVM二十四【方法调用和返回(二)】

发表于 2017-02-21 | 分类于 JVM

本节继续实现方法调用和返回。

返回指令

方法执行完毕之后,需要把结果返回给调用方,这一工作由返回指令完成。返回指令属于控制指令,一共6条。其中return指令用于没有返回值的情况,areturn、ireturn、lreturn、和dreturn分别用于返回引用、int、long、float和double类型的值。该系列指令实现代码位于/instructions/control/return.go文件中:

阅读全文 »
bboyjing's blog

自己动手写JVM二十三【方法调用和返回(一)】

发表于 2017-02-21 | 分类于 JVM

本章开始将实现方法调用和返回,在此基础上,还会讨论类和对象的初始化。

方法调用概述

从调用角度来看,方法可以分为两类:静态方法和实例方法。静态方法通过类来调用,实例方法则通过对象引用来调用。静态方法时静态绑定的,也就是说,最终调用的时哪个方法在编译期就已经确定了。实例方法则支持动态绑定,最终要调用哪个方法可能要推迟到运行期才知道。
在Java7之前,Java虚拟机规范一共提供了4条方法调用指令。其中invokestatic指令来调用静态方法。invokespecial指令用来调用无需动态绑定的实例方法,包括构造函数、私有方法和通过supper关键字调用超类方法。剩下的情况则属于动态绑定。如果是针对接口类型的引用调用方法,就使用invokeinterfase指令,否则使用invokevirtual指令。本章将实现这四条指令,为了更好地支持动态类语言,Java7增加了一条方法调用指令invokedynamic,本章不讨论该指令。在深入讨论各条方法调用指令的细节之前,先简单了解下Java虚拟机是如何调用方法的。

阅读全文 »
1…151617…30
bboyjing

bboyjing

147 日志
17 分类
20 标签
友情链接
  • bailaohe
© 2021 bboyjing
由 Hexo 强力驱动
主题 - NexT.Mist