黑马程序员技术交流社区

标题: 关于堆和栈内存问题 [打印本页]

作者: 长石    时间: 2014-1-21 15:29
标题: 关于堆和栈内存问题
  关于堆和栈内存,在学习视频中提到了一部分,设计到默认值,引用这一块的。我想问的是,关于内存这一块,我们要学习到什么程度。我们以后的软件开发中涉不涉到这一块的,还是只用学习到视频中的那一程度就可以了。。。  
作者: 三十而立    时间: 2014-1-21 16:26
关于内存这一块,我们要学习到什么程度?
强调一点,我这方面也不是很懂的,不过以下是我的个人见解。
(1)内存这块的东西,如果想深入研究java的话,这块是需要深入研究的很大一块,因为只有知道了内存具体管理的机制,数据存放的规则和位置是怎么样的,才能更好的编写自己的程序,优化自己的程序的效率。
(2)在现在的阶段,因为要准备培训班的话,我个人的建议是,可以先理解到视频里老师讲解的程序。然后,以后需要的话,在做具体的研究。
(3)我也不是做软件的,不过我猜测,除非是非常高级的开发人员,可能很多时候也是接触不到这块东西的。
作者: 廉伟杰    时间: 2014-1-21 20:24
栈是由编译器(Compiler)自动分配释放,存放函数的参数值,局部变量的值等,如定义int a;a就在栈区里面,而堆的话是在内存中开辟空间得到,如new 类名(),数组,这中在内存中不用时,需自己释放或者系统释放       我觉得这个例子可以很好的解释   Person p = new Person();
这里的 p就是在栈内存中的,而new Person()在堆内存中开辟,包括这个对象的字段和方法,堆内存中每一个存放的一堆有一个地址,而把这个地址赋给了p

我刚觉主要的知道这些,像更深入的理解他们的话,我感觉暂时不用的,前期知道这些应该能为以后的面试提供很大的帮助的
作者: 贺利英    时间: 2014-1-21 21:26
关于这一块 ,其实我学习视频的时候也是很模糊,然后就问我们班做程序的同学,他们给我讲解了一些他们的理解,而且他们说我追究的太深。但是我觉得对于内存这块理解的程度需要达到:第一,要知道哪些变量存在于栈内存,哪些变量事物存在于堆内存,哪些事物存在于方法区,比如,局部变量存在于栈内存中,成员变量存在于堆内存中,方法、类或者静态变量、方法、常量是被加载进方法区的等等;第二,要知道变量什么时候加载进内存中,什么时候此变量占用的空间被释放,如,栈内存中的变量是当此变量所在的大括号一结束,它所占用的空间就被释放了,而堆内存中的变量是当对象使用完了之后此变量成为垃圾,但是只有垃圾清理机制来清理时,才会释放内存;第三,要知道局部变量的使用范围,即大括号一结束,此变量也就在内存中清除了,所以在另外一个函数里可以定义同样的名称的变量。这是我的理解。




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