黑马程序员技术交流社区

标题: JVM堆和栈的区别 [打印本页]

作者: 此间的少年    时间: 2016-10-2 09:34
标题: JVM堆和栈的区别
物理地址    堆的物理地址分配对对象是不连续的。因此性能慢些。在GC的时候也要考虑到不连续的分配,所以有各种算法。比如,标记-消除,复制,标记-压缩,分代(即新生代使用复制算法,老年代使用标记——压缩)
栈使用的是数据结构中的栈,先进后出的原则,物理地址分配是连续的。所以性能快。
内存分别
    堆因为是不连续的,所以分配的内存是在运行期确认的,因此大小不固定。栈是连续的,所以分配的内存大小要在编译期就确认,大小是固定的。
存放的内容堆存放的是对象的实例和数组。因此该区更关注的是数据的存储
栈存放:局部变量,操作数栈,返回结果。该区更关注的是程序方法的执行。
PS:
程序的可见度堆对于整个应用程序都是共享、可见的。
栈只对于线程是可见的。所以也是线程私有。他的生命周期和线程相同。

作者: 此间的少年    时间: 2016-10-2 09:35
以前经常纠结于他们两个的区别,现在终于弄明白了
作者: 小明教授    时间: 2016-10-2 13:23
好分享,楼主好人
作者: 醉醒    时间: 2016-10-2 13:38
学习了.....
作者: 赢无翳    时间: 2016-10-2 14:31
厉害 这些东西基本都没听过
作者: 风暴之灵    时间: 2016-10-2 15:34
这波不亏

作者: babysa    时间: 2016-10-2 17:38
简单记  new出来的都在堆内存  
作者: 刘野    时间: 2016-10-2 20:17
感谢分享。。
作者: Zzh94520    时间: 2016-10-2 21:56
。。。。。。。。。。。。
作者: xianghui0521    时间: 2016-10-3 10:23

方法会弹栈
作者: 小沧月    时间: 2016-10-3 10:51
66666666666666666666
作者: 扬帆起航fonnson    时间: 2016-10-3 11:19
哦这样啊

作者: 飞舞的指尖    时间: 2016-10-3 14:13
{:2_41:}大神啊  正解
作者: 不羁的码农    时间: 2016-10-3 14:17
学到了,谢谢
作者: 杨杰锋    时间: 2016-10-3 17:38
学习了.....
作者: wo1026756529    时间: 2016-10-3 18:14
所以本质还是内存??




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