美文网首页
Java数组在内存中如何存放

Java数组在内存中如何存放

作者: 极客天空 | 来源:发表于2020-04-18 20:55 被阅读0次

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

    一维数组

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


    一维数组.png

    二维数组

    那么二维数组是如何存储的呢?事实上,在Java中只有一维数组,二维数组是一个存放了数组的数组,如下代码及示意图:
    int[ ][ ] arr = new int[3][ ];
    arr[0] = new int[3];
    arr[1] = new int[5];
    arr[2] = new int[4];

    2维数组.png

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

    在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里;
    现在内存中堆和栈的大致情况如下图:


    堆和栈.png

    相关文章

      网友评论

          本文标题:Java数组在内存中如何存放

          本文链接:https://www.haomeiwen.com/subject/djzovhtx.html