为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?

1、从软件设计的角度来看,栈代表了处理逻辑,而堆代表了数据,
这样分离使得处理逻辑更为清晰。这种隔离、模块化的思想在软件设计的方方面面都有体现。

2、堆与栈的分离,使得堆中的内容可以被多个栈共享。
这种共享有很多好处,一方面提供了一种有效的数据交互方式(如内存共享),另一方面,节省了内存空间。

3、栈因为运行时的需要(如保存系统运行的上下文),需要进行地址段的划分。由于栈只能向上增长,
因此会限制住栈存储内容的能力。而堆不同,堆的大小可以根据需要动态增长。
因此,堆与栈的分离,使得动态增长成为可能,相应栈中只需要记录堆中的一个地址即可。

4、堆和栈的完美结合就是面向对象的一个实例。其实,面向对象的程序与以前结构化的程序在执行上没有任何区别,
但是面向对象的引入使得对待问题的思考方式发生了改变,是更接近于自然的思考方式。
当把对象拆开会发现,对象的属性其实就是数据,存放在堆中,而对象的方法就是处理逻辑,
存放在栈中。我们编写对象的时候,其实即编写了数据结构,也编写了处理数据的逻辑。

总结:栈主要用来执行程序,堆主要用来存放对象,为栈提供数据存储服务。也正是因为堆与栈分离的思想才使得JVM的垃圾回收成为可能。

全部评论

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务