黑马程序员技术交流社区

标题: 栈内存和堆内存的特点是什么?求指教 [打印本页]

作者: 鹰隼展翼    时间: 2015-7-13 23:20
标题: 栈内存和堆内存的特点是什么?求指教
如题所示,求指教
作者: 白面馅包子    时间: 2015-7-13 23:22
所有的基本数据类型全部是存储在栈里面,因为栈存储速度快。
一个对象,他的实际内容是存储在堆里面的,而他的引用是存储在栈里面。
比如
String s=new String("123");
这个s就在栈里面,而他的"123"这个对象在堆里面。 s 指向"123";
作者: 鹰隼展翼    时间: 2015-7-13 23:26
奥谢谢,我来好好理解一下
作者: 任文龙    时间: 2015-7-13 23:28
栈内存里存储的内容使用结束就被释放,堆内存里存储的内容如果不被指向的话,过一段时间会有内存回收机制清理释放。
至于哪些存储在栈内存,哪些在堆内存,就不是一两句话了
作者: 菜鸟学徒    时间: 2015-7-13 23:32
栈内存存储基本数据类型,当函数调用完成后,其内部变量所占的内存空间会被释放。
堆内存存放引用数据类型,及new出来的都在堆内存里面。
      堆内存特点:1:堆内存有内存地址,都是讲内存地址赋值给引用变量;
                        2:堆内存会自动初始化;
                        3:堆内存变量无用后由垃圾回收机制不定时回收。
今天刚看,希望对你有帮助

作者: 人造番茄    时间: 2015-7-14 07:09
学习一番很有用
作者: Vampire..    时间: 2015-7-14 10:23
      在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配。当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间,当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间,该内存空间可以立刻被另作他用。
    堆内存用于存放由new创建的对象和数组。在堆中分配的内存,由java虚拟机自动垃圾回收器来管理。在堆中产生了一个数组或者对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组或者对象在堆内存中的首地址,在栈中的这个特殊的变量就变成了数组或者对象的引用变量,以后就可以在程序中使用栈内存中的引用变量来访问堆中的数组或者对象,引用变量相当于为数组或者对象起的一个别名,或者代号。




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