黑马程序员技术交流社区

标题: heap和stack有什么区别? [打印本页]

作者: 黑马-zhangping    时间: 2012-10-20 00:17
标题: heap和stack有什么区别?
这个问题困扰我了很久,就是 heap和stack有什么区别?
作者: 丁旭    时间: 2012-10-20 00:26
本帖最后由 丁旭 于 2012-10-20 00:31 编辑

heap是堆,当创建一个对象后,会在堆中开辟内存空间,存储实例属性值。
stack是栈,当程序中调用实例方法或静态方法时,会根据方法区中方法的定义,把方法压栈并运行,为局部变量、对象引用开辟空间存储数据。
堆和栈的关系在创建对象时最为明显,例如:Person p=new Person();
当new一个Person对象后会在堆中根据Person类型开辟内存空间,然后在栈中创建一个对象的引用p指向它。
作者: sun~~    时间: 2012-10-20 01:49
java中堆(heap)和堆栈(stack)的区别
1、栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。
2、stack 和 heap 都是内存的一部分,stack 空间小,速度比较快, 用来放对象的引用,heap 空间大,一般所有创建的对象都放在这里。
3、 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。               
4、举例:
数据类型 变量名;这样定义的东西在栈区。

如:Object a =null; 只在栈内存中分配空间

new 数据类型();或者malloc(长度);    这样定义的东西就在堆区

如:Object b =new Object(); 则在堆内存中分配空间







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2