Java为了提高程序的效率,对内存空间进行了不同的划分,具体有以下5个内存空间:
1、栈:存放的是局部变量,即主要存放main中的变量,包括类的对象在堆中的地址,但是当对象调用他们的成员方法的时候,会在子栈中申请一块内存来存储该成员方法。
特点:
A:栈内存的数据使用完就释放掉
B:先进后出
2、堆:存放的是所有new出来的东西,即累的对象,包括对象的成员变量,以及成员方法在堆中的标记(成员方法在方法区中的地址)。同时把该对象的首地址标记在栈中对象的声明的内存下。
特点:
A:每一个new出来的东西都有地址值
B:每个变量都有默认值
byte,short,int,long 默认值为0
float,double, 默认值为0.0
char 默认值为 ‘\u0000’
boolean 默认值为false
引用类型 默认值为null
C:使用完毕就变成了垃圾,但是并没有立即回收,会在垃圾回收器空间的时候回收。
3、方法区:存放class文件,以及对象的成员方法。同时会把该成员方法的地址标记在堆的对象内存下,但是当对象调用他们的成员方法的时候,该方法会入栈。
4、本地方法区:(和系统相关)
5、寄存器:(CPU使用)