黑马程序员技术交流社区

标题: 堆和栈的疑惑 [打印本页]

作者: 李深山    时间: 2012-3-19 21:24
标题: 堆和栈的疑惑
class  Hello
{
        public static void main(String[] args)
        {
                System.out.println("Hello World!");
       Person p = new person();
        }
}
Class Person{}
堆和栈有什么变化,内存中有什么变化?
作者: 王思兰    时间: 2012-3-19 21:37
"Hello World"存放在数据区(data segment),p存放在栈内存中,指向堆内存中new出来的Person对象
作者: 马云    时间: 2012-3-19 21:42
p存放在栈中             new person()存在堆中
(画图的时候让人抢先回答了)
不明白上图
http://bbs.itheima.com/forum.php?mod=attachment&aid=MTIwM3w4Mzk2MjE2MjQyOGZlYjg2ZWQwYjVmZmQ4ZWQ4NTliNHwxNzQwNjA0OTM1&request=yes&_f=.jpg

未命名.jpg (28.39 KB, 下载次数: 72)

未命名.jpg

作者: 李创    时间: 2012-3-19 21:43
栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量.
在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域).
堆(heap):是一个可动态申请的内存空间(其记录空闲内存空间的链表由操作系统维护),C中的malloc语句所产生的内存空间就在堆中.
在java中,所有使用new xxx()构造出来的对象都在堆中存储,当垃圾回收器检测到某对象未被引用,则自动销毁该对象.所以,理论上说java中对象的生存空间是没有限制的,只要有引用类型指向它,则它就可以在任意地方被使用
作者: 李飞    时间: 2012-3-19 22:34
1. new创建一个对象,放在堆内存中
2. p属于引用型,存放在栈内存中
3. hello world存放在数据区中




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