028-86261949

当前位置:首页 > 技术交流 > 堆栈的简单理解

堆栈的简单理解

2019/03/26 09:58 分类: 技术交流 浏览:13

今天给大家简单介绍下堆栈,一起看看吧!

一、堆在哪里?栈在哪里?堆栈的区别和联系是什么?

刚开始听到堆栈的概念的时候,我天真的以为,在我们电脑的内存条上,有一处栈区域,有一处堆区域,后来我去查了内存条的相关区域划分,发现怎么找都找不到所谓的堆区和栈区,才知道自己弄错了,,,

首先,堆和栈是存在于内存中,而不是内存条上的分区,它们的区别,最直观的,就是大小的区别,如果你的电脑支持虚拟内存的话,那么堆的大小可以是你的硬盘加你内存条,当然这是一个理论值,至于栈,windows系统中栈的大小默认是1m到2m之间,要说栈和堆的联系,就得说说线程和进程这两个东西,我们打开一个程序,比如浏览器,在我们的系统管理中就会看到一个浏览器的进程,这个进程实际上就包括了系统为浏览器分配的堆区间(这个区间是可以变化的,如果需要的内存空间大,那么会自动申请扩容的),线程,以及一些其他的东西。我们说的栈就存在与线程中,要想理解他们间的关系,不如打个比方,现在有一个仓库(进程),在仓库的东边有一块很大的区域(堆),这里放着很多细小的零件(堆中的数据),现在我需要把东边的零件搬运到西边,于是老板叫来三个工人(三个线程),他们每个人都拿着一个箱子(栈,存放从堆中取的数据),将零件装进箱子然后搬到西边了,,,

二、为什么要划分堆栈?

要想理解这个问题,我们还以上面的例子为例,假如零件还是堆放在东边(堆中),现在工厂的老板来了(cpu),老板想要查看某个零件,于是拿着一张记录零件编号的表(堆数据的存放地址),查看一番后决定查看编号为0x234的零件,但是如果让老板亲自去东边一大堆零件中翻找这个零件,肯定不合适,很浪费老板的时间,于是这时候又一个工人去把这个零件找了出来,放到箱子里面,然后搬到老板面前,让老板查看(cpu处理数据),待老板查看完后,工人又将零件从箱子取出放回原来的位置(数据出栈)。

所以,从这个例子可以看出,划分堆栈,是为了让cpu在处理数据的时候节约时间,一个很简单问题,在4G内存中找一条数据和在1m中找一条数据,显然是后面的省时省力得多了。

以上就是关于堆栈的相关内容了, 了解更多的Java学习内容 关注源码时代哦!

 

        

#标签:堆栈是什么,堆栈的理解