星空网 > 软件开发 > Java

【Simple Java】Java数组在内存中是如何存放的

Java中有两种类型的数组:

  • 基本数据类型数组;
  • 对象数组;

当一个对象使用关键字“new”创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说也是一样的,因为数组也是一个对象;

一维数组

int[] arr = new int[3];

在以上代码中,arr变量存放了数组对象的引用;如果你创建了空间大小为10的整形数组,情况是一样的,一个数组对象所占的空间在堆上被分配,然后返回其引用;

【Simple Java】Java数组在内存中是如何存放的

二维数组

那么二维数组是如何存储的呢?事实上,在Java中只有一维数组,二维数组是一个存放了数组的数组,如下代码及示意图:

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

【Simple Java】Java数组在内存中是如何存放的

对于多维数组来说,道理是一样的;

数组对象及其引用存放在内存中的哪里?

在Java中,数组同样是一个对象,所以对象在内存中如何存放同样适用于数组;

正如我们都知道的,java运行时数据区包括堆,JVM栈和其它。如下代码是一个小例子,那么就让我们来看看数组和它的引用在内存中是如何存放的.

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

如上代码,让我们来调用方法m1,看看发生了什么:

当m1被调用的时候,栈帧Frame-1被创建并push到栈中,同时局部变量i也在栈帧Frame-1内创建。

然后,m2方法在m1方法内部被调用,栈帧Frame-2被创建并push到栈中,在m2方法中,一个新的对象A在堆中被创建,而它的引用则被put到栈帧Frame-2里;

现在内存中堆和栈的大致情况如下图:

【Simple Java】Java数组在内存中是如何存放的

数组同样是对象,所以数组和对象以及引用在内存中的分布如上所示;

 

译文链接:http://www.programcreek.com/2013/04/what-does-a-java-array-look-like-in-memory/




原标题:【Simple Java】Java数组在内存中是如何存放的

关键词:JAVA

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

跨境电商货运流程:https://www.goluckyvip.com/tag/93238.html
跨境铁路货运:https://www.goluckyvip.com/tag/93239.html
跨境海运:https://www.goluckyvip.com/tag/93240.html
跨境物流单:https://www.goluckyvip.com/tag/93241.html
跨境的货运:https://www.goluckyvip.com/tag/93242.html
跨境电商货物流:https://www.goluckyvip.com/tag/93243.html
价格翻了8倍,居然还有人买,秘诀在这里。:https://www.kjdsnews.com/a/1836642.html
欧洲B2B电商市场有待挖掘!销售总额将达1.7万亿欧元:https://www.kjdsnews.com/a/1836643.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流