JAVA数组的内存解析
数组这个概念大家都不陌生但是你知道他在内存中是什么样的吗?
内存中各个分区解析
内存中分为栈区堆区和方法区具体如下图所示
知道了内存中的一些结构我们才能对数组在内存中进行解析。
数组内存解析
我们看如下一段代码
int []arr=new int[]{1,2,3};
String []arr1=new String[4];
arr1[1]="小明";
arr1[2]="张三";
arr1=new String[3];
这段代码在内存中是如何运行的呢?
代码开头两句先在栈区先后创建两个局部变量arr,arr1,在堆区开辟相应的内存空间,并对其进行初始化,arr在代码中已经初始化,arr1由于是引用类型所以初始化为null同时将堆区的地址传给arr,arr1。再看三四两句给arr1的第二和第三个元素赋值
最后一行代码又新开辟了一个有三个连续元素的数组将他的地址值赋值给arr1此时arr1不指向之前的数组而指向新的数组。之前所开辟的数组空间将会在一个不确定的时间被清理。然后main方法结束之后arr1出栈0x12ab这块空间也将会被回收,arr出栈同样的0x1234也会被回收。