A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何红卫 中级黑马   /  2013-4-3 00:32  /  2912 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

经常看到书上说值类型存放在栈上,速度要比存放在堆中的引用类型要快。为什么存放在栈的数据要比堆中的快,栈是从哪些方面体现它的快的,而堆为什么慢,主要时间耗在哪些地方了。查了一下资料,没看懂。想理解清楚,才知道什么时候使用值类型传递,什么时候强制为引用类型进行传递,毕竟强制为引用类型传递会有副作用。

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

3 个回复

倒序浏览
菜鸟,路过
回复 使用道具 举报
     栈是编译期间就分配好的内存空间,因此数据在定义的时候已经明确了要占用多大的内存空间。值类型分配在栈上的,栈是从高位地址到低位地址存储数据的,我们定义一个int类型的值时,栈指针递减四个字节的地址;当变量出了作用域后,栈指针相应的相应的递增四个字节的地址,它只是栈指针的上下移动,所以堆栈的性能是相当高的。
     堆是程序运行期间动态分配的内存空间,可以根据程序的运行情况确定要分配的堆内存的大小。引用类型分配在受管制的堆上的,它的销毁是受GC控制的。
     我的观点就这么多,建议你还是找一些更详细的资料来看!

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
可以通俗的理解为:程序运行需要读取数据的时候,先去栈空间上面找,如果是栈空间上面有值(值类型数据),则直接读取;如果在栈空间找到的是引用地址(引用类型),则去该引用地址所指向的堆空间去找数据,找到数据返回。

这样理解,就明白为什么栈空间的数据比堆空间的数据读取得快了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马