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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

提示: 该帖被管理员或版主屏蔽
签名被屏蔽

6 个回复

倒序浏览
按毕老师的讲解,简单理解就是,堆中保存对象,是实体,而栈为对象的地址;
或者说常见的就是,栈内存用来保存变量名,堆内存用来保存New出来的对象;
至于常量池,真心没接触,等高手解释..

不过这个链接说了一些,楼主可以参考下:
http://zhidao.baidu.com/question/92015465.html?fr=qrl&index=2
回复 使用道具 举报
栈内存一般放的是局部变量,比如int[] a = new int[10]  --------这个局部变量就是a
堆内存一般放的是对象和封装在对象里的属性比如Person p = new Person();  -------------new Person()在堆内存中创建了对象,如果他有属性一般放在创建对象所开辟的空间里面一块区域
常量池一般存放类变量或类方法如static 修饰的变量 static int i =10; static void show();

关系:栈内存中的局部变量在用时指向堆即引用,程序结束,局部变量消除;程序中如果在使用类方法时会将其压入栈内存中,程序结束,方法结束;


个人理解的就这么多,有更好的理解共同探讨~

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
栈内存:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈内存中,而是存放在堆(new 出来的对象)或者常量池虽(字符串常量对象存放在常量池中)。
堆内存:存放所有new出来的对象。
常量池:存放字符串常量和基本类型常量(public static final)。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
对于栈和常量池中的对象可以共享,对于堆中的对象不可以共享。栈中的数据大小和生命周期是可以确定的,当没有引用指向数据时,这个数据就会消失。堆中的对象的由垃圾回收器负责回收,因此大小和生命周期不需要确定,具有很大的灵活性。对于字符串:其对象的引用都是存储在栈中的,如果是编译期已经创建好(直接用双引号定义的)的就存储在常量池中,如果是运行期(new出来的)才能确定的就存储在堆中。对于equals相等的字符串,在常量池中永远只有一份,在堆中有多份。

关系就是java虚拟机分配了不同的内存空间用来存放对象,基本类型的变量数据和对象引用的吧!

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 唐志兵 于 2012-10-11 09:10 编辑

栈内存一般用于保存局部变量,程序在调用过程中将调用参数或者局部变量push到堆栈中,然后通过esp寄存器寻址,子程序结束时pop出栈。
堆内存是有程序在运行过程中动态的申请一段内存地址保存,譬如 new 一个对象。
常量池是在编译时候就已经确定的 用于保存程序中的常量数据。
学过汇编就是爽。
回复 使用道具 举报
唐志兵 发表于 2012-10-11 09:07
栈内存一般用于保存局部变量,程序在调用过程中将调用参数或者局部变量push到堆栈中,然后通过esp寄存器寻 ...

哎,呵呵,是不是我也要看看汇编语言呀,求推荐汇编方面的书呀?再次感谢回复。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马