zoukankan      html  css  js  c++  java
  • 数组的内存结构

    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中,此时,堆内存和栈内存

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

  • 相关阅读:
    字典
    字符串常用的方法
    切片,集合、文件处理
    蓝桥杯练习 Day6 题解
    spoj-ORDERS
    spoj-SUBSUMS
    spoj
    spoj --- ABCDEF
    C. Andryusha and Colored Balloons
    B. The Meeting Place Cannot Be Changed
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9618971.html
Copyright © 2011-2022 走看看