java数组内存结构

译自:programcreek 

Java中的数组存储两种东西之一:要么是原始值(int, char, ...),或是引用(即指针)。

当一个对象通过"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)被压入栈中,局部变量i也被创建在(Frame-1)里。
  2. 然后m2在m1内部被调用,另外一个新的帧(Frame-2)被压入栈中。在m2中,一个class A的对象被创建在堆中,引用变量被放到(Frame-2)里。此时,栈和堆如下所示:

数组和对象是以相同的方式处理,所以读者也会明白数组在内存中是如何存储。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值