Java中成员变量分配在哪个空间?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中成员变量分配在哪个空间?相关的知识,希望对你有一定的参考价值。

变量分为成员变量和局部变量;
成员变量又分为实例变量和静态变量;
实例变量在对象创建的时候分配内存空间,存储在堆内存中;
静态变量在类加载的时候分配内存空间,存储在元空间;
局部变量在方法执行时分配内存空间,存储在栈内存中。
参考技术A 首先,对象都在堆内存中。
然后,非静态成员变量肯定是属于一个对象的,所以非静态成员变量也在堆内存中。
至于静态成员变量,jdk8 之前在方法区,jdk8 开始在元空间。
参考技术B 保存在栈中!

Java对象的实例化过程

简单类对象的实例化过程:

  1. 在方法区加载类

  2. 在栈内存申请空间,声明变量P

  3. 在堆内存中开辟空间,分配对象地址

  4. 在对象空间中,对对象的属性进行默认初始化,类成员变量显示初始化

  5. 构造方法进栈,进行初始化

  6. 初始化完成后,将堆内存中的地址赋给引用变量,构造方法出栈

技术图片


子类对象的实例化过程:

  1. 在方法区先加载父类,再加载子类

  2. 在栈中申请空间,声明变量P

  3. 在堆内存中开辟空间,分配对象地址

  4. 在对象空间中,对对象的属性(包括父类的属性)进行默认初始化

  5. 子类构造方法进栈

  6. 显示初始化父类的属性

  7. 父类构造方法进栈,执行完毕出栈

  8. 显示初始化子类的属性

  9. 初始化完毕后,将堆内存中的地址值赋给引用变量P,子类构造方法出栈

技术图片

以上是关于Java中成员变量分配在哪个空间?的主要内容,如果未能解决你的问题,请参考以下文章

请问java里给成员变量赋值,那成员变量会在哪个内存空间里

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

java成员变量和局部变量的初始化和内存中的运行机制

类成员变量在哪里分配

java 13.静态类成员

类对象里面只有成员变量占用空间,成员函数不占用空间。