1 JVM的数据类型
我们知道 Java 语言的类型可以分为两大类:基本类型(primitive types)和引用类型(reference types)。
image1.1 基本类型
Java 的基本类型还包括整数类型 byte、short、char、int 和 long,以及浮点类型 float 和 double,boolean。
1.1.2 Java 基本类型的取值范围
imageJava 的基本类型都有对应的值域和默认值。可以看到,byte、short、int、long、float 以及 double 的值域依次扩大,而且前面的值域被后面的值域所包含。因此,从前面的基本类型转换至后面的基本类型,无需强制转换。
1.1.2 Java 基本类型的大小
栈帧中
在栈帧中除了 long、double 值需要用两个变量槽单元来存储之外,其他基本类型以及引用类型的值均占用一个变量槽单元存储。也就是说,boolean、byte、char、short 这四种类型,在栈上占用的空间和 int 是一样的,和引用类型也是一样的。因此,在 32 位的 HotSpot 中,这些类型在栈上将占用 4 个字节;而在 64 位的 HotSpot 中,他们将占 8 个字节。
堆中
对于 byte、char 以及 short 这三种类型的字段或者数组单元,它们在堆上占用的空间分别为一字节、两字节,以及两字节,也就是说,跟这些类型的值域相吻合。
1.2 引用类型
Java 引用类型将其细分为四种:类、接口、数组类和泛型参数。由于泛型参数会在编译过程中被擦除,因此 Java 虚拟机实际上只有前三种。在类、接口和数组类中,数组类是由 Java 虚拟机直接生成的,其他两种在Class文件中则有对应的字节流。
引用类型只存在于栈或方法区中大小为4个字节
网友评论