java在堆和栈中保存了哪些数据

public static void mian(String args[]){
          
   
      A a=new A();
    }

![在这里插入图片描述](https://img-blog.img.cn/img_convert/3bdc2c35bbd35a24414f65d495208805.png

1.加载class文件到class内容区域,加载静态方法和静态变量到静态区(同时加载的) 2.调用main方法到栈内存 3.在栈内存中为a变量(A对象的引用)开辟空间 4.在堆内存为A对象申请空间 5.给成员变量进行默认初始化(此时 i=0),同时有一个方法标记,在方法区中创建一个A的方法区,将A的方法区的地址0x01给方法标记 6.给成员变量进行显示初始化(此时 i=1) 7.将A对象的地址值给变量a

所以答案为栈中保存了A对象的引用(即变量A),堆中报存了A对象。 ##(二)堆栈、堆、方法区 JAVA的JVM的内存可分为3个区:堆(heap)、堆栈(stack)和方法区(method)

###1.堆区:

提供所有类实例和数组对象存储区域

jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身

###2.栈区:

每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中

每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。

###3.方法区:

又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。

方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

运行时常量池都分配在 Java 虚拟机的方法区之中。

经验分享 程序员 微信小程序 职场和发展