Heap(堆):在JVM中的作用为内存数据区,在数据存储时,存放的是实例化的对象
Stack(栈):在JVM中的作用是内存指令区,在数据存储时,存放的是基本数据类型, 指令代码,对象的引用地址,形参
对象实例在heap中分配好以后,需要在stack中保存一个内存地址(来指向堆内存的对象,也就是引用),用来定位该对象实例在heap中的位置,便于找到该对象实例
以下是收录在我博客中的一段话:
"Java 的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。"
“栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和引用。 ” |