A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-zhangping 中级黑马   /  2012-10-20 00:17  /  1848 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个问题困扰我了很久,就是 heap和stack有什么区别?

评分

参与人数 1黑马币 +10 收起 理由
刘芮铭 + 10

查看全部评分

2 个回复

正序浏览
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(); 则在堆内存中分配空间


评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 丁旭 于 2012-10-20 00:31 编辑

heap是堆,当创建一个对象后,会在堆中开辟内存空间,存储实例属性值。
stack是栈,当程序中调用实例方法或静态方法时,会根据方法区中方法的定义,把方法压栈并运行,为局部变量、对象引用开辟空间存储数据。
堆和栈的关系在创建对象时最为明显,例如:Person p=new Person();
当new一个Person对象后会在堆中根据Person类型开辟内存空间,然后在栈中创建一个对象的引用p指向它。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马