黑马程序员技术交流社区
标题:
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