内存—栈堆
在java中,JVM将内存分为6个区域,这里我们只看栈和堆
栈:
方法的调用时在栈区进行的,每个方法的调用都是一个栈帧入栈出栈的过程.栈的特点是:先进后出
堆:
JVM的另一块区域称为"堆区",所有对象都在堆区存储,包括数组的对象,类的实例化对象,接口对象等.
下面我们来看一段程序:
public class Test1 {
public static void main(String[] args) {
int[] arr = {1, 2, 3};
printArr(arr);
}
public static void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
这是程序在内存中的图
出栈的顺序和入栈的顺序相反:
- printArr栈帧出栈
- main方法出栈
在这里,我们可以通俗的理解,将栈里面的内容比作遥控器,将堆里面的内容比作电视机.以上面为例,堆里面的数组是电视机,而main中的int[] arr和printArr()分别为遥控器,它们都可以操作电视机(数组).
总结:
-
所谓对象就是实实在在在堆中保存的数据实体,new出来的都在堆中保存.
-
数组的引用就是就是给这块的数组起了个名字,保存这个数组对象的首地址而已.