java的数组在内存中是什么样的呢?
java中数组有2中情况:基本类型(如:int,char等等)或者引用(或者叫指针)。
当使用”new” 创建一个对象的时候,内存是分配在堆上同时返回一个索引。当数组是对象的时候,对于它来说也是一样的。
1. 一维数组
|
|
int[] 数组只是有3个整数的索引。如果你创建10个整数,它也是相同的-分配一个数组然后返回索引。
2. 二维数组
二维数组又是什么样的呢?实际上,在java中我们只能有一维数组。2D数组都是基于一维数组的。
|
|
多维数组使用相同的规则。
3.在内存中他们位于何处?
在java中Arrays 和对象一样,所以一个对象在内存中如起来像什么,那么数组也一样。
我们知道JVM Run-Time Data Areas包括堆、JVM栈和别的。下面是一个简单的例子,让我们来看看数组的索引是怎么存储的。
|
|
根据上面的申明,我们调用m1() 来看看发生了什么:
1.当m1() 调用时,一个新的帧(Frame-1)推入栈,同时Frame-1中创建了局部变量等。
2.然后m1中的m2()被调用,一个新的帧(Frame-2)被压入栈。在m2中,类A的一个对象在堆中被创建同时索引变量被压入Frame-2。现在在这个点,栈和堆类似如下:
数组和对象是很像的,所以可以直截了当的定位数组在内存的分配。