动力节点旗下在线教育品牌  |  咨询热线:400-8080-105 学Java全栈,上蛙课网
首页 > 文章

吃透java多线程栈

06-16 18:31 431浏览
举报 T字号
  • 大字
  • 中字
  • 小字

”,只有一个简单的字,其中却蕴含着大量的信息和技术。搞清楚这个概念,首先要明白”栈“的本意,如此才能把握本质水落石出"栈“者,存储货物或供旅客住宿的地方,可引申为仓库、中转站,引入到计算机领域里,就是指数据暂时存储的地方,是一种数据结构,故有进栈、出栈的说法。顾名思义,Java多线程栈是指的就是多线程中的数据的暂时存储的地方。

栈(Stack)又名堆栈是线程独有的一种允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。因此,栈也称为先进后出表。多线程栈在线程开始的时候初始化,每个线程的栈互相独立,因此,栈是thread safe的。操作系统在切换线程的时候会自动的切换栈,就是切换 SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

目前在很多操作系统中,一个进程的(虚拟)地址空间大小为4G,包含了系统空间和用户空间两部分,系统空间为所有进程共享而用户空间是独立的,一般WINDOWS进程的用户空间为2G。一个进程中的所有线程共享该进程的地址空间,但它们有各自独立的(私有的)栈(stack),Windows线程的缺省堆栈大小为1M。堆(heap)的分配与栈有所不同,一般是一个进程有一个C运行时堆,这个堆为本进程中所有线程共享,Windows进程还有所谓进程默认堆,用户也可以创建自己的堆。具体的数据结构如下图所示

1人推荐
共同学习,写下你的评论
0条评论
在天边
程序员在天边

3篇文章贡献8506字

作者相关文章更多>

推荐相关文章更多>

支付接口的幂等性设计

军哥08-05 15:18

一文梳理REST API的设计原则

军哥09-01 10:54

如何在Linux系统下开发java程序

jessy06-15 17:31

彻底解决java JDK注册表残留问题

天天天天天歌06-15 17:38

浅谈Java设计模式-之-适配器模式

调技师傅09-01 16:47

发评论

举报

0/150

取消