目录
1. int[10] 在 JVM 内存上的分配过程
栈内存
堆内存
2. int[10] 占用的空间大小
堆内存空间
栈内存空间
1. int[10]
在 JVM 内存上的分配过程
在 Java 中,当你创建一个 int[10]
数组时,JVM 会涉及堆内存和栈内存的分配,下面详细介绍:
栈内存
栈内存主要用于存储局部变量和方法调用的上下文信息。当你在方法中声明一个 int[10]
数组时,会在栈内存中创建一个引用变量。这个引用变量存储的是数组对象在堆内存中的地址,而不是数组的实际数据。
示例代码:
public class ArrayMemoryAllocation {public static void main(String[] args) {// 在栈内存中创建一个引用变量arrayint[] array = new int[10]; }
}
在上述代码中,array
就是存储在栈内存中的引用变量,它指向堆内存中实际的数组对象。
堆内存
堆内存用于存储对象实例。当执行 new int[10]
时,JVM 会在堆内存中分配一块连续的内存空间,用于存储数组的 10 个 int
元素。数组对象包含数组的长度信息以及实际的元素数据。
2. int[10]
占用的空间大小
堆内存空间
在 Java 中,int
类型是基本数据类型,占用 4 个字节(32 位)的内存空间。因此,一个包含 10 个 int
元素的数组 int[10]
,其元素本身占用的内存空间为: 4 字节/元素 × 10 元素 = 40 字节
此外,数组对象还会有一些额外的开销,用于存储数组的元数据,如数组的长度等。在不同的 JVM 实现中,对象头的大小可能会有所不同,但通常在 32 位 JVM 上对象头占用 8 字节,在 64 位 JVM 上如果开启了压缩指针(默认开启)对象头占用 12 字节,未开启压缩指针则占用 16 字节。
所以,在 64 位 JVM 开启压缩指针的情况下,int[10]
数组在堆内存中占用的总空间为 12 字节(对象头) + 40 字节(元素数据) = 52 字节
。由于 JVM 通常会对对象进行 8 字节对齐,所以最终占用的空间会调整为 56 字节。
栈内存空间
栈内存中存储的引用变量,在 32 位 JVM 上占用 4 字节,在 64 位 JVM 上如果开启了压缩指针占用 4 字节,未开启压缩指针则占用 8 字节。
综上所述,int[10]
数组在堆内存中占用约 56 字节(64 位 JVM 开启压缩指针),栈内存中占用 4 字节(64 位 JVM 开启压缩指针)。