java类中成员变量初始化后存放在堆内存中还是栈内存中?
7个回答
展开全部
栈内存:某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈。当函数运行结束时,分配给函数的栈空间被收回,在这个函数中被定义的变量也随之被释放和消失。
堆内存:通过new产生的数组和对象分配在堆内存中。堆内存中分配的内存,由JVM提供的GC(垃圾回收机制)来管理。在堆内存中产生了一个数组对象后,我们还可以在栈中定义一个变量,这个栈中变量的取值等于堆中对象的首地址。栈内存中的变量就成了堆内存中数组或者对象的引用变量。我们以后就可以在程序中直接使用栈中的这个变量来访问我们在堆中分配的数组或者对象,引用变量相当于数组或者对象起的一个别名,或者代号。
引用变量是一个普通的变量,定义时在栈中分配;引用变量在被运行到它的作用域之外时就被释放,而我们的数组和对象本身是在堆中分配的,即使程序运行到使用new产生对象的语句所在的函数或者代码之后,我们刚才被产生的数组和对象也不会被释放。数组和对象只是在没有引用变量指向它,也就是没有任何引用变量的值等于它的首地址,它才会变成垃圾不会被使用,但是它任然占据着内存空间不放(这也就是我们Java比较吃内存的一个原因),在随后一个不确定的时间被垃圾回收器收走。
堆内存:通过new产生的数组和对象分配在堆内存中。堆内存中分配的内存,由JVM提供的GC(垃圾回收机制)来管理。在堆内存中产生了一个数组对象后,我们还可以在栈中定义一个变量,这个栈中变量的取值等于堆中对象的首地址。栈内存中的变量就成了堆内存中数组或者对象的引用变量。我们以后就可以在程序中直接使用栈中的这个变量来访问我们在堆中分配的数组或者对象,引用变量相当于数组或者对象起的一个别名,或者代号。
引用变量是一个普通的变量,定义时在栈中分配;引用变量在被运行到它的作用域之外时就被释放,而我们的数组和对象本身是在堆中分配的,即使程序运行到使用new产生对象的语句所在的函数或者代码之后,我们刚才被产生的数组和对象也不会被释放。数组和对象只是在没有引用变量指向它,也就是没有任何引用变量的值等于它的首地址,它才会变成垃圾不会被使用,但是它任然占据着内存空间不放(这也就是我们Java比较吃内存的一个原因),在随后一个不确定的时间被垃圾回收器收走。
展开全部
成员变量分为静态变量和实例变量,静态变量存放在方法区内存,实例变量存放在堆内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
变量声明放在栈里面,对象实例放在堆.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
栈存的是引用,堆放数据,
A a = new A();
a是引用,new A();在堆中,即成员变量在new A();中
A a = new A();
a是引用,new A();在堆中,即成员变量在new A();中
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
放在栈内存里。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询