堆:
用来存放对象实例和全局变量以及数组
栈:
用来存放局部变量,如果在方法中创建一个对象,会在栈中留下指针或者说是地址,指向堆中你创建的这个对象,如果给对象的属性赋值是基本数据类型就直接改,如果是引用类型,就在堆中创建一个实例,给对象的属性一个地址,指向堆中的这个实例
当这个方法或函数执行完毕,栈中的数据会被自动清空,那堆中的数据呢?堆中的数据不会自动清理,因为你不知道其他线程是否需要堆中的实例,这就要说到java中的GC机制了。
方法区:
方法区主要存放一些类的元数据,什么是类的元数据呢,就是类结构信息,比如类中的常量,构造函数,方法数据