黑马程序员技术交流社区

标题: 为什么存放在栈的数据要比堆中的快 [打印本页]

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

作者: 939676244    时间: 2013-4-3 01:21
菜鸟,路过
作者: 张正强    时间: 2013-4-3 08:35
     栈是编译期间就分配好的内存空间,因此数据在定义的时候已经明确了要占用多大的内存空间。值类型分配在栈上的,栈是从高位地址到低位地址存储数据的,我们定义一个int类型的值时,栈指针递减四个字节的地址;当变量出了作用域后,栈指针相应的相应的递增四个字节的地址,它只是栈指针的上下移动,所以堆栈的性能是相当高的。
     堆是程序运行期间动态分配的内存空间,可以根据程序的运行情况确定要分配的堆内存的大小。引用类型分配在受管制的堆上的,它的销毁是受GC控制的。
     我的观点就这么多,建议你还是找一些更详细的资料来看!
作者: 曾玉锋    时间: 2013-4-3 16:23
可以通俗的理解为:程序运行需要读取数据的时候,先去栈空间上面找,如果是栈空间上面有值(值类型数据),则直接读取;如果在栈空间找到的是引用地址(引用类型),则去该引用地址所指向的堆空间去找数据,找到数据返回。

这样理解,就明白为什么栈空间的数据比堆空间的数据读取得快了。




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