java类中成员变量初始化后存放在堆内存中还是栈内存中?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java类中成员变量初始化后存放在堆内存中还是栈内存中?相关的知识,希望对你有一定的参考价值。

栈内存:某一个函数被调用时,这个函数会在栈内存里面申请一片空间,以后在这个函数内部定义的变量,都会分配到这个函数所申请到的栈。当函数运行结束时,分配给函数的栈空间被收回,在这个函数中被定义的变量也随之被释放和消失。

堆内存:通过new产生的数组和对象分配在堆内存中。堆内存中分配的内存,由JVM提供的GC(垃圾回收机制)来管理。在堆内存中产生了一个数组对象后,我们还可以在栈中定义一个变量,这个栈中变量的取值等于堆中对象的首地址。栈内存中的变量就成了堆内存中数组或者对象的引用变量。我们以后就可以在程序中直接使用栈中的这个变量来访问我们在堆中分配的数组或者对象,引用变量相当于数组或者对象起的一个别名,或者代号。

引用变量是一个普通的变量,定义时在栈中分配;引用变量在被运行到它的作用域之外时就被释放,而我们的数组和对象本身是在堆中分配的,即使程序运行到使用new产生对象的语句所在的函数或者代码之后,我们刚才被产生的数组和对象也不会被释放。数组和对象只是在没有引用变量指向它,也就是没有任何引用变量的值等于它的首地址,它才会变成垃圾不会被使用,但是它任然占据着内存空间不放(这也就是我们Java比较吃内存的一个原因),在随后一个不确定的时间被垃圾回收器收走。
参考技术A 成员变量分为静态变量和实例变量,静态变量存放在方法区内存,实例变量存放在堆内存 参考技术B 变量声明放在栈里面,对象实例放在堆. 参考技术C 栈存的是引用,堆放数据,
A a = new A();
a是引用,new A();在堆中,即成员变量在new A();中来自:求助得到的回答
参考技术C 放在栈内存里。

java中局部变量和成员变量的区别?

  • 在类中的位置不同

        成员变量:成员位置---在类中,方法外定义的变量
        局部变量:在方法定义中,或者方法声明上的变量
  • 在内存中的位置也不同

        成员变量:在堆内存中
        局部变量:在栈内存中
  • 生命周期不同

        成员变量:随着对象的创建而存在,随着对象的回收而消失
        局部变量:随着方法调用而存在,随着方法的调用完毕而消失
  • 初始化不同

        成员变量:跟对象相关的,描述一个对象的属性(成员变量存在一个系统
        默认初始化),当然也可以直接赋值
        局部变量:
                在使用之前,必须初始化,否则编译不通过
  • 以上是关于java类中成员变量初始化后存放在堆内存中还是栈内存中?的主要内容,如果未能解决你的问题,请参考以下文章

    C语言里,哪些变量是存放在堆里,哪些是存放在栈里?

    变量是放在了堆内存还是栈内存

    java面向对象

    java中局部变量和成员变量的区别?

    2017/05/16 java 基础 随笔

    java语言中,类的成员变量分配在哪个内存区?