在java中,为了提高程序的效率,就对数据进行了不同空间的分配
具体划分了5个内存空间:
栈(Stack):
1、存放的是方法中的局部变量
2、栈内存的数据用完就释放掉
堆(Heap):
1、存放的是所有new出来的东西(每一个new出来的对象都有一个地址值)
2、堆中不存放基本类型和对象引用,只存放对象本身
3、每个变量都有默认值
4、使用完毕就变成了垃圾,但是并没有立即回收,会在垃圾回收器空闲时回收
方法区:存储class相关的信息,一些方法的信息
本地方法区:(和系统相关)
寄存器:(CPU使用,与CPU相关)
用数组的赋值举个例子:
public static void main(String[] args) {
int[] a = new int[3];
a[0] = 1;
}
例子是一个main方法,我们将这个方法头放入方法区
运行时将main方法在栈中开辟一个内存空间,这就是进栈
int[] a是放在栈中,new int[3]是放在堆中,按其索引值和属性给定空间,再将其地址赋值给a,这个时候a就可以通过地址找到对应的内存,在这个时候没有给数组赋初值,所以a[0]、a[1]、a[2]都是0,计算机查找数组内容啊按照先a找地址,再通过索引值找内容,当我们给a[0]赋值时,也是在栈中按照地址先找到堆中内存,再通过索引值找到具体位置,再修改内容。