数组的内存结构

java中的数组存储着两类的事物:原始值或者引用(对象指针)

当一个对象通过new关键字进行创建的时候,那么就会在内存中分配一段空间,并返回其相应的引用(指针)

1.一维数组

  int[] arr = new int[3];

int[] arr 指向包含3个整数的数组。假设创建的是包含10个整数的数组,也是用同样的方法:分配指定大小的内存,并返回相应数组的应用

2.二维数组

二维数组又有什么区别呢?java中只有一维数组,二维数组本质也是一维数组,知识数组中的每个元素都指向了另外一个一维数组而已

  

int[][] arr = new int[3][];
arr[0] = new int[3];
arr[1]= new int[5];
arr[2] = new int[4];

那么同样的原理,多维数组也是如此

3.数组分配在内存的哪个区域中?

数组分配在内存的堆中。java中的数组也是对象,因此数组所在的区域和对象是一样的,我们知道JVM运行的时候,数据区包括JVM栈、堆内存以及其他的区域。

  

class A{
  int x ;
  int y ;       
}
...
public void m1(){
  int i = 0 ;
  m2();        
}
public void m2(){
  A a = new A();      
}
....

上面代码片段中,让我们执行m1()方法看看发生了什么:

  1.当m1被调用的时候,一个新的栈帧(Frame-1)被亚茹JVM栈中,当然,相关的局部变量也在Frame-1中创建,比如i;

  2.然后m1调用m2,又有一个新的栈帧(Frame-2)被压入JVM栈中;m2方法在堆内存中创建了A类的一个对象,此对象的引用保存在Frame-2的局部变量a中,此时,堆内存和栈内存

而数组别当做对象进行处理了,数组存储在哪个区域中

原文地址:https://www.cnblogs.com/bigdata-stone/p/9618971.html