Java有八种基本类型,来支持数值计算。Java这么做的主要原因主要是工程上的考虑,因为使用基本类型能够在执行效率以及内存使用两个方面提升软件性能。
Java的基本类型

Java有八种基本类型,来支持数值计算。Java这么做的主要原因主要是工程上的考虑,因为使用基本类型能够在执行效率以及内存使用两个方面提升软件性能。
Java基本类型的大小
Java虚拟机每调用一个Java方法,便会创建一个栈帧。为了方便理解,这里只讲供解释器使用的解释栈帧(interpreted frame)。
这种栈帧有两个主要的组成部分,分别是局部变量区,以及字节码的操作数栈。这里的局部变量是广义的,除了普遍意义下的局部变量之外,它还包含实例方法的“this指针”以及方法所接收的参数
在Java虚拟机规范中,局部变量区等价于一个数组,并且可以用正整数来索引。除了long、double值需要用两个数组单元来存储外,其他基本类型以及引用类型的值均占用一个数组单元。
也就是说,boolean、byte、char、short、这四种类型,在栈上占用的空间和int是一样的,和引用类型也是一样的。因此,在32位的HotSpot中,这些类型在栈上将占用4个字节;而在64位的HotSpot中,他们将占8个字节。
Java虚拟机的算数运算几乎全部依赖于操作数栈。也就是说,我们需要将堆中的boolean、byte、char、以及short加载到操作数栈上,而后将栈上的值当成int类型来运算。
===========================================================
总结:
1、boolean类型在Java虚拟机中被映射为整数类型:“true”被映射为1,而“false”被映射为0。Java代码中的逻辑运算以及条件跳转,都是用整数相关的字节码来实现的。
2、除boolean类型之外,Java还有另外7个基本类型。他们拥有不同的值域,但默认值在内存中均为0.这些基本类型中,浮点类型比较特殊。基本他的运算或比较,需要考虑+0.0F、-0.0F以及NaN的情况。
3、除long和double外,他们基本类型与引用类型在解释执行的方法栈帧中占用的大小是一致的,但他们在堆中占用的大小却不同。在将boolean、byte、char、以及short的值存入字段或者数组单元时,Java虚拟机进行掩码操作。在读取时,Java虚拟机则会将其扩展为int类型。
Java基本类型的大小
Java虚拟机每调用一个Java方法,便会创建一个栈帧。为了方便理解,这里只讲供解释器使用的解释栈帧(interpreted frame)。
这种栈帧有两个主要的组成部分,分别是局部变量区,以及字节码的操作数栈。这里的局部变量是广义的,除了普遍意义下的局部变量之外,它还包含实例方法的“this指针”以及方法所接收的参数
在Java虚拟机规范中,局部变量区等价于一个数组,并且可以用正整数来索引。除了long、double值需要用两个数组单元来存储外,其他基本类型以及引用类型的值均占用一个数组单元。
也就是说,boolean、byte、char、short、这四种类型,在栈上占用的空间和int是一样的,和引用类型也是一样的。因此,在32位的HotSpot中,这些类型在栈上将占用4个字节;而在64位的HotSpot中,他们将占8个字节。
Java虚拟机的算数运算几乎全部依赖于操作数栈。也就是说,我们需要将堆中的boolean、byte、char、以及short加载到操作数栈上,而后将栈上的值当成int类型来运算。
===========================================================
总结:
1、boolean类型在Java虚拟机中被映射为整数类型:“true”被映射为1,而“false”被映射为0。Java代码中的逻辑运算以及条件跳转,都是用整数相关的字节码来实现的。
2、除boolean类型之外,Java还有另外7个基本类型。他们拥有不同的值域,但默认值在内存中均为0.这些基本类型中,浮点类型比较特殊。基本他的运算或比较,需要考虑+0.0F、-0.0F以及NaN的情况。
3、除long和double外,他们基本类型与引用类型在解释执行的方法栈帧中占用的大小是一致的,但他们在堆中占用的大小却不同。在将boolean、byte、char、以及short的值存入字段或者数组单元时,Java虚拟机进行掩码操作。在读取时,Java虚拟机则会将其扩展为int类型。
出处:《极客时间》 郑雨迪老师的《深入拆解Java虚拟机》
备注:纯属督促自己复习,梳理每节知识点。如有错误,请多加指出。谢谢
网友评论