黑马程序员技术交流社区

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

作者: hanxing    时间: 2014-11-7 22:48
标题: 堆内存和栈内存
本帖最后由 hanxing 于 2014-11-10 21:14 编辑

这两个分别用来干什么的?有什么区别?傻傻分不清啊
作者: zxbzxb333    时间: 2014-11-8 06:41
堆内存用于存放对象,对象不用时JVM会启用垃圾回收期将其回收;
栈内存用于存放被调用的方法,方法被调用时进栈,方法结束时出栈(专业术语叫弹栈)
作者: hanxing    时间: 2014-11-8 15:41
zxbzxb333 发表于 2014-11-8 06:41
堆内存用于存放对象,对象不用时JVM会启用垃圾回收期将其回收;
栈内存用于存放被调用的方法,方法被调用时 ...

十分感谢!!!
作者: 扫地僧wu    时间: 2014-11-8 16:03
楼主那么多的黑马币和技术分,会不懂这个么
作者: 高昌德    时间: 2014-11-8 16:08
zxbzxb333 发表于 2014-11-8 06:41
堆内存用于存放对象,对象不用时JVM会启用垃圾回收期将其回收;
栈内存用于存放被调用的方法,方法被调用时 ...

变量是不是存在栈内存中?方法不是存在方法区中的吗?
作者: zhangyangLengen    时间: 2014-11-8 16:33
  一般变量存在方法中,当调用方法时,方法进栈,此时栈会开辟一部分空间给方法,同时方法中的一些变量比如方法的形式参数,会在该空间中存在;
  同时方法区又分:静态的方法区和类中的成员函数的方法区
作者: zxbzxb333    时间: 2014-11-8 17:13
高昌德 发表于 2014-11-8 16:08
变量是不是存在栈内存中?方法不是存在方法区中的吗?

方法没有调用的时候都存在方法区,方法在调用的时候才进栈中运行,方法区又分为静态方法区,非静态方法区,和底层方法区;
至于变量存在哪里毕老师的视频中这块貌似也没有详细讲过,我的理解是,成员变量(方法也是成员变量)也存在于方法区中,当new对象时就复制一份跟随new的对象存入堆内存中,复制的那份随着对象的消亡而消亡;非静态局部变量是属于方法的,跟着方法走。
作者: hanxing    时间: 2014-11-8 17:37
扫地僧wu 发表于 2014-11-8 16:03
楼主那么多的黑马币和技术分,会不懂这个么

你竟然怀疑我,:L,我是真不懂啊,前面的视频都没看呢,看见坛友们天天说内存,也很纠结的
作者: hanxing    时间: 2014-11-8 17:42
zxbzxb333 发表于 2014-11-8 17:13
方法没有调用的时候都存在方法区,方法在调用的时候才进栈中运行,方法区又分为静态方法区,非静态方法区 ...

又晕了....
作者: void    时间: 2014-11-8 19:05
1.栈

栈中存放基本类型的变量和对象的引用,他们的内存大小和生命周期是确定的,会在变量退出作用域时有编译器释放所占内存。

2.堆

堆内存用来存放new()出来的对象,对象的引用则依然存放在栈中。堆中的内存由Java虚拟机的自动垃圾回收器来管理。当栈内存中不存在堆中的对象的引用时此对象成为垃圾,会在某一时刻被垃圾回收器回收。
http://my.oschina.net/u/2263603/blog/342152
作者: w239983684    时间: 2014-11-8 19:47
同求解。
作者: baoting_1990    时间: 2014-11-8 20:09
堆用于存放对象,在对象生命周期到了时,JVM会自动清除;
作者: baoting_1990    时间: 2014-11-8 20:14
栈用来存放正在执行的方法、临时变量等,当方法执行完后,会将这个方法的所有东西都删掉;总之堆用于存放一堆临时数据,而栈用于存储少量的临时数据
作者: 桃华月禅    时间: 2014-11-8 20:54
我擦。都没看视频这些技术分都是哪里来的....
作者: yangsing0    时间: 2014-11-8 21:21
堆内存用于存放对象,对象不用时JVM会启用垃圾回收期将其回收; 栈内存用于存放被调用的方法,方法被调用时进栈,方法结束时出栈(专业术语叫弹栈)
作者: Carter    时间: 2014-11-8 22:09
他们都是内存的分区,有着不同的数据处理方式和内存管理方式。
栈内存用于存储局部变量,当数据使用完成后,总动清理掉数据并释放内存
堆内存一般用来存储数组和对象,通过new关键字来为数组和对象在堆内存中分配空间,当数据不被使用时候,会被视为垃圾,会不定时被垃圾回收器回收,而且在堆内存中存储的数据会被自动进行初始化。
作者: hanxing    时间: 2014-11-8 22:12
桃华月禅 发表于 2014-11-8 20:54
我擦。都没看视频这些技术分都是哪里来的....

信不信由你,上班期间看了其他机构的一整套视频(这里我不敢打广告,但那视频也蛮好的),从javase,jdbc,dom到jQuery了,还有oracle,其中dom和jQuery现在有点生疏了.现在辞职了,因为想报黑马,就回过头走流程,但我不可能从java基础一节一节的看吧?所以我按老师说的看java加强部分,前面部分随机看了几个视频,也就是io高新,反射,其实我这些都是看过的,只是不同的老师的视频可能部分知识点的提法不同,有些侧重点也不同,也有像毕老师的gui我以前是完全没有看过的.
关于技术分其实我也没有多少,版主给了些,做王老师的题目5分,其它的就是用黑马币换的
作者: hanxing    时间: 2014-11-8 22:16
void 发表于 2014-11-8 19:05
1.栈

栈中存放基本类型的变量和对象的引用,他们的内存大小和生命周期是确定的,会在变量退出作用域时有编 ...

你博客中的内存溢出是在哪里看的视频?
作者: date1130    时间: 2014-11-8 22:26
好吧,来学习一下。。。。
作者: void    时间: 2014-11-8 22:28
hanxing 发表于 2014-11-8 22:16
你博客中的内存溢出是在哪里看的视频?

Think in java
java虚拟机
这两本书里面的
作者: hanxing    时间: 2014-11-8 22:29
date1130 发表于 2014-11-8 22:26
好吧,来学习一下。。。。

欢迎大神+土豪
作者: hanxing    时间: 2014-11-8 22:31
yangsing0 发表于 2014-11-8 21:21
堆内存用于存放对象,对象不用时JVM会启用垃圾回收期将其回收; 栈内存用于存放被调用的方法,方法被调用时 ...

刚看了毕老师的视频(数组那块),难道我们看的不是同一中视频,我怎么没看到毕老师说弹栈这个术语?可能后面视频还有介绍?
作者: treanow    时间: 2014-11-9 00:48
本来自己是有理解的,看了大家的回复,更加清晰了!!!
作者: 桃华月禅    时间: 2014-11-9 22:14
hanxing 发表于 2014-11-8 22:12
信不信由你,上班期间看了其他机构的一整套视频(这里我不敢打广告,但那视频也蛮好的),从javase,jdbc,dom到 ...

黑马入学需要多少分?我为什么不信...
作者: hanxing    时间: 2014-11-9 22:16
桃华月禅 发表于 2014-11-9 22:14
黑马入学需要多少分?我为什么不信...

25把,先付费的就不用技术分了
作者: 桃华月禅    时间: 2014-11-9 22:19
hanxing 发表于 2014-11-9 22:16
25把,先付费的就不用技术分了

实在是不行我也打算黑马币换了= =
作者: 焦旭宁1    时间: 2014-11-9 23:29
大神!!!!




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