java中的内存分配
java中内存分配有两个地方,分别为栈内存和堆内存
- 栈内存
栈内存存储的是定义在main方法中的局部变量,而且在使用完后,该内存占用立即消失。
- 堆内存
堆内存存储的是在main方法中new出来的实体、对象等,每new出来的对象都会有一个地址值,该地址中存储的就是该实体对应的数据。如果没有定义数据的具体内容,那么计算机会给所有数据一个默认值,该默认值一般取决于数据类型,具体见下图:
举个例子,在main中,我们创建一个局部变量 :A,同时再给它一个值。
int a =3;
那么,这个a就是存储在栈内存中的变量,在程序结束时,该内存立即释放;而数据“3”就是存储在堆内存中的数据,这个数据在程序结束时不会立即删除,而是在垃圾回收器空闲时才被回收。
再举个例子,创建一个数组a,其数据个数为3:
int[] a= new int(3)
在这个例子中,我们的数组变量a就是存储于栈内存中,而a数组中3个数据,在new时会在堆内存中分配一个地址,该地址下存储着a数组3个数据。
2021年5月28日更新
java中在程序开始时定义的常量(用final定义)也直接存储在栈内存中。如:
private static final int a = 20 ;
这里的a是一个常量,就直接存储在栈内存中,可以在程序中直接调用。