本片文章解决问题:
1. 内存结构简单说明
2. 一维数组内存解析
3. 二维数组内存解析
4. 对象的内存解析
1.内存结构简单说明
我们常用的内存结构有三种:
-
堆(Heap)。 此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
-
通常所说的栈(Stack)。 是指虚拟机栈。虚拟机栈用于存储局部变量等。局部变量表存放了编译期可知长度的
各种基本数据类型(boolean、byte、char 、 short 、 int 、 float 、 long 、double)、对象引用(reference类型,
它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。
-
方法区(Method Area)。 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
我们自己画的三种主要内存结构:
2.一维数组内存解析
要解析的代码为:
int[] arr = new int[]{1,2,3};
String[] arr1 = new String[4];
arr1[1] = “刘德华”;
arr1[2] = “张学友”;
arr1 = new String[3];
sysout(arr1[1]);//null
3.二维数组内存解析
要解析的代码为:
int[][] arr1 = new int[4][];
arr1[0] = new int[3];
arr1[1] = new int[]{1,2,3};
arr1[0][2] = 5;
arr1 = new int[2][];
4.对象的内存解析
要解析的代码为:
Person p1 = new Person();
p1.name = "Tom";
p1.isMale = true;
Person p2 = new Person();
sysout(p2.name);//null
Person p3 = p1;
p3.age = 10;