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

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

  • 相关阅读:
    scrapy爬虫框架
    MongoDB分组查询,聚合查询,以及复杂查询
    mac重启iterm后不会自动加载.bash_profile
    Linux 之 2>&1
    linux下利用nohup后台运行jar文件包程序
    【intellij idea】汇总
    JAVA虚拟机体系结构
    JDK > JRE > JVM
    依赖注入(IOC) 详解
    mysql 忘记密码 登陆+修改密码
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/9618971.html
Copyright © 2011-2022 走看看