java虚拟机规范(se8)——java虚拟机结构(一)

本文翻译自:https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html

第二章 虚拟机结构

  本文档描述了一个抽象的虚拟机规范,并不描述某个特定的虚拟机实现。

  要正确实现一个Java虚拟机,你只需要能够读取class文件的格式并正确执行其中指定的操作。具体的实现并不是java虚拟机规范的一部分,因为它们会限制实现者的创造力。比如,运行时数据区域的内存布局,垃圾回收使用的算法,以及任何的java虚拟机指令的内部优化(如:转换为机器码)都留给实现者去决定。

  本规范中引用的所有Unicode都遵守Unicode 标准,6.0.0版本,可以从http://www.unicode.org/.获取。

2.1 class文件格式

  编译后能够被java虚拟机执行的代码使用了一个独立于硬件和操作系统的二进制格式,通常(不是必须的)存在一个文件中,就是通常所说的class文件格式。class文件格式精确的定义了类和接口的表示,包括一些如字节序(byte ordering)的细节,可能在平台相关的目标文件格式中这被认为是理所当然的。

  第四章,class文件格式给出了class文件格式的细节。

2.2 数据类型

  类似于java编程语言,java虚拟机操作两种数据类型:基本类型和引用类型(primitive types and reference types)。相应的,有两种类型的数据可以用于变量赋值、参数传递和方法返回:基本值和引用值(primitive values and reference values)。

  java虚拟机期望几乎所有的类型检查在运行前完成,通常由编译器完成,不应该在java虚拟机中完成。基本类型的值不需要特殊标记,或者特殊的方法在运行时确定他们的类型,也不需要将它们和引用类型区分开来。相反,Java虚拟机的指令集对不同的操作数使用不用的操作数指令,从而来区分其操作数类型。例如,iadd,ladd,fadd和dadd这些java虚拟机指令用来求两个数之和,它们分别指明了操作数的类型是int,long,float和double。更多的java虚拟机指令可参考2.11.1。

  Java虚拟机包含对对象的显式支持。对象是动态分配的类实例或数组。一个对象的引用可以认为是Java虚拟机的引用(reference)类型。引用(reference)的值可以被认为是指向对象的指针。可能存在多个对象的引用。对象始终通过引用(reference)类型的值来进行的值的操作,传递和检查。

2.3 基本数据类型和值

  java虚拟机支持的基本类型由数字类型,布尔类型以及returnAddress类型。

  数字类型包括整数类型和浮点数类型。

  具体的整数类型如下:

  •   byte,其值为8位有符号二进制补码整数,其默认值为零
  •   short,其值为16位有符号二进制补码整数,其默认值为零
  •   int,其值为32位有符号二进制补码整数,其默认值为零
  •   long,其值为64位有符号二进制补码整数,其默认值为零
  •   char,其值为16位无符号整数,表示基本多文本平面(Basic Multilingual Plane)中的Unicode代码点,使用UTF-16编码,其默认值为空代码点('\ u0000')

  浮点型数字类型如下:

  •   fload,值为单精度浮点数集合②中的元素,或者(如果虚拟机支持的话)是单精度扩展指数(Float-Extended-Exponent)集合中的元素。默认值为正数零。
  •   double,取值范围是双精度浮点数集合中的元素,或者(如果虚拟机支持的话)是双精度扩展指数(Double-Extended-Exponent)集合中的元素。默认值为正数零。

  布尔类型的值取值访问是true和false,默认值是false(Java®虚拟机规范的第一版没有将布尔值视为Java虚拟机类型。但是,布尔值在Java虚拟机中的支持有限。Java®虚拟机规范的第二版通过将布尔值视为一种类型来澄清该问题。)

  returnAddress类型的值是指向Java虚拟机指令的操作码(opcodes)的指针。在基本类型中,除了returnAddress类型,其它类型都与Java编程语言类型直接相关联。

2.3.1 整数类型和值

  java虚拟机中的整型的取值范围如下:

  byte, (-27 to 27 - 1),

  short,  (-215 to 215 - 1),

  int,  (-231 to 231 - 1)

  long,(-263 to 263 - 1)

  char,(0 ~ 2^16-1)

  

猜你喜欢

转载自www.cnblogs.com/lilinwei340/p/10461695.html