初学者对java数组中栈和堆的认识

来源:互联网 发布:台湾中华电信网络制式 编辑:程序博客网 时间:2024/06/05 19:26
public static void main(String[] args) {        String[] Array = null;        Array = new String[3];        Array[0] = "安徽合肥";        Array[1] = "江苏苏州";        Array[2] = "安徽铜陵";        for(int i=0;i<=2;i++){            System.out.println(Array[i]);        }    }
    以上代码是对数组简单的声明及内存分配的小实例,简单的实现了数组的应用。接下来想和大家分享的是数组在内存中的存放形式,以及在数组中栈和堆的关系。首先给出结论:数组引用变量(即Array变量)是存放在栈内存中,数组元素(即Array[0]、Array[1]等元素)是存放在堆内存中,通过栈内存中的指针指向对应元素的在堆内存中的位置来实现访问,以下图来说明数组此时的存放形式。

这里写图片描述

   在java中,当执行方法时,该方法都会建立自身的内存栈,以用来将该方法内部定义的变量逐个加入到内存栈中,当执行结束时方法的内存栈也随之销毁,所有变量存放在栈内存中,即随着寄存主体的消亡而消亡;反之,当我们创建一个对象时,这个对象被保存到运行时数据区中,即存放在堆空间中,以便反复利用(因为创建成本很高),此时不会随着执行方法的结束而消亡,同时该对象还可被其他对象所引用,只有当这个对象没有被任何引用变量引用时,才会在垃圾回收在合适的时间点回收。