黑马程序员技术交流社区

标题: 计算机什么时候用栈内存,什么时候用对内存? [打印本页]

作者: 刘永昌    时间: 2011-10-30 23:20
标题: 计算机什么时候用栈内存,什么时候用对内存?
最近老接触到堆,栈内存,虽然稀里糊涂的知道一点,可就是没能捅破那层窗纸?求教各位大虾!O(∩_∩)O谢谢!!
作者: 李建雄    时间: 2011-10-30 23:27
本帖最后由 李建雄 于 2011-10-30 23:33 编辑

就把我知道的一点说一下:
首先:启动时JVM在内存中,开辟几个空间,到底是四个还是五个不清楚了,不过其中就有栈内存,堆内存,方法区
main方法在 栈内存中,成员变量在栈内存中开辟空间,static的除外,如果是new一个对象的话,就在堆内存中开辟空间
staitc的都在方法区中,当然方法也在方法区中

作者: 咖啡    时间: 2011-10-30 23:36
堆是先进先出,而栈是先进后处 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享,详见第3点。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
在多态中会涉及到堆,栈,理解了会觉得很简单,不然就看不明白是什么意思。



作者: 刘永昌    时间: 2011-10-30 23:41
咖啡 发表于 2011-10-30 23:36
堆是先进先出,而栈是先进后处 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java ...

嗯,O(∩_∩)O谢谢
作者: 刘永昌    时间: 2011-10-30 23:43
李建雄 发表于 2011-10-30 23:27
就把我知道的一点说一下:
首先:启动时JVM在内存中,开辟几个空间,到底是四个还是五个不清楚了,不过其中就有 ...

不知道static 相关数据在哪儿开辟内存?
作者: 何周舟    时间: 2011-10-31 01:55
好像是这样
堆 垃圾回收机制 存 一维/二位数组 类的实例化/对象/new
栈 自动释放       存 成员变量/实例变量
方法区/共享区   存 被static修饰的
刚刚学 了解不全面 各位补充下
作者: 石头    时间: 2011-10-31 02:25
这个东西用语言描述没有画图来得通俗易懂。 强烈建议多看几遍毕老师的教程,黑马程序员_毕向东_Java基础视频教程第03天-17-数组(概述-内存结构)。看得多了,自然而然就理解了。
作者: wsssx    时间: 2011-10-31 08:04
提示: 作者被禁止或删除 内容自动屏蔽




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