计算机内存在存储数据的时候可以分成三大块
第一块:栈区
第二块:堆区
第三块:共享资源区,方法区。
在第三块中又分了(静态数据区,和非静态数据区)
栈内存区:主要存放的都是基本类型数据,以及对对象的引用,采用后进先出的原理,快速处理内存中的数据,一旦这当中的某一个单元生命周期完结就立刻释放该单元所占用的栈内存。又称弹栈。
堆内存区:主要是用来存放非基本类型即引用类型数据的地方。而引用类型在java中,全是new关键字创建的new关键字后面是调用的该引用类型的构造器,而构造器是用来初始化数据的,这些初始化得数据(就是楼主说的成员变量)被包装在引用类型的构造器中一起创建出来。由于存放引用数据类型的地是在堆内存当中,所以这些成员也一起被创建进了堆内存当中,当然对成员变量值得描述时,是基本类型的值该成员变量还是会指向堆内存当中的某个基本值单元,是引用类型的值 就会指向 堆内存当中的另一块引用类型区域
对于你说的局部变量 其实任何变量他就是一个引用,仅仅是一个引用,这个引用他引用的是基本数据类型 就指向的栈内存区域,引用的是引用类型(即对象)就指向的是堆内存,当然这个局部变量 一般都存储在栈内存或者是方法区中。
以上是我的理解仅供参考,如果有不对,还请各位看到的同学们帮忙纠正。 |