一维数组内存分析
Java虚拟机的内存划分
为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
区域名称 |
作用 |
虚拟机栈 |
用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度<br/>的各种基本数据类型、对象引用,方法执行完,自动释放。 |
堆内存 |
存储对象(包括数组对象),new来创建的,都存储在堆内存。 |
方法区 |
存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。 |
本地方法栈 |
当程序中调用了native的本地方法时,本地方法执行期间的内存区域 |
程序计数器 |
程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址 |
一维数组在内存中的存储
一个一维数组内存图newint[3];
System.out.println(arr);//[I@5f150435
数组下标为什么是0开始:因为第一个元素距离数组首地址间隔0个单元格。
两个一维数组内存图
两个数组独立
int[] arr = new int[3]; int[] arr2 = new int[2]; System.out.println(arr); System.out.println(arr2);
两个变量指向一个一维数组
两个数组变量本质上代表同一个数组。
// 定义数组,存储3个元素 int[] arr = new int[3]; //数组索引进行赋值 arr[0] = 5; arr[1] = 6; arr[2] = 7; //输出3个索引上的元素值 System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); //定义数组变量arr2,将arr的地址赋值给arr2 int[] arr2 = arr; arr2[1] = 9; System.out.println(arr[1]);