堆和栈
昨天网易模拟测试,最后一个题目就是讲一讲堆和栈的区别,记得以前学C++的时候,老师就作用域的问题谈过堆和栈,现在具体分析一下:
Java 的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。 —— [ 网上来的 ]
栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象句柄。 —— [ 网上来的 ]
也就是说,在java中,heap是内存数据区,存储的数据是对象实例。
stack是内存指令区,存储的数据有——基本数据类型,指令代码,常量,对象的引用地位。