本文翻译自: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/
.获取。
编译后能够被java虚拟机执行的代码使用了一个独立于硬件和操作系统的二进制格式,通常(不是必须的)存在一个文件中,就是通常所说的class文件格式。class文件格式精确的定义了类和接口的表示,包括一些如字节序(byte ordering)的细节,可能在平台相关的目标文件格式中这被认为是理所当然的。
第四章,class文件格式给出了class文件格式的细节。
类似于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)类型的值来进行的值的操作,传递和检查。
java虚拟机支持的基本类型由数字类型,布尔类型以及returnAddress类型。
数字类型包括整数类型和浮点数类型。
具体的整数类型如下:
浮点型数字类型如下:
布尔类型的值取值访问是true和false,默认值是false(Java®虚拟机规范的第一版没有将布尔值视为Java虚拟机类型。但是,布尔值在Java虚拟机中的支持有限。Java®虚拟机规范的第二版通过将布尔值视为一种类型来澄清该问题。)
returnAddress类型的值是指向Java虚拟机指令的操作码(opcodes)的指针。在基本类型中,除了returnAddress类型,其它类型都与Java编程语言类型直接相关联。
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)
原文:https://www.cnblogs.com/lilinwei340/p/10461695.html