2 zj8692286 zj8692286 于 2014.11.24 22:13 提问

关于Java栈的问题,它是共享的吗

我在Java虚拟机那本书里面看到说虚拟机栈是线程私有的,但是为什么网上一大片都说栈可以共享数据?线程私有怎么共享?我的理解是,对于每一个线程,它的栈里面的值是相同的?所以说栈可以共享数据也没什么问题了?

3个回答

YKDSea
YKDSea   Rxr 2014.11.25 10:59
已采纳

栈是线程私有的,意思是说每个线程都有自己的栈。
而栈可以共享数据是说,线程a在栈上的数据,线程b也是可以访问的(比如a把某个栈上变量传给了b),因为他们在一个进程内,数据访问是没有问题的。

对于每一个线程,栈里面的内容当然不一样,你要去找文章看看栈里面保存的是什么内容。

LockJVM
LockJVM   2014.11.24 22:16

栈是线程私有的吧,应该不共享的。或者只能说为了优化部分空间是共享的

caozhy
caozhy   Ds   Rxr 2014.11.24 22:18

线程有独立的堆栈,但是共享堆。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
栈内存与堆内存在数据共享方面的区别
栈内存的一个特点是数据共享,堆内存没有数据共享的特点。
Java实现栈-两栈共享空间
大话数据结构中以合租房子为例,来比喻两栈共享空间这种结构,我想说得已经比较清楚了,在Java实现中,我们定义一个数组作为基准存储容器,两个栈,栈1的栈底是在数组的始端,栈2的栈底在数组的顶端,两个栈在push元素时候主键朝数组的中间靠拢,当栈1的栈顶top1+1=栈2 栈顶top2,那么此时栈满; 下面上代码: public class BothStackShareMemory {
关于Java栈与堆的思考
关于Java栈与堆的思考
栈中数据共享
int a = 3; int b = 3; 编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找有没有字面值为3的地址,没找到,就开辟一个存放3这个字面值的地址,然后将a指向3的地址。接着处理int b = 3;在创建完b的引用变量后,由于在栈中已经有3这个字面值,便将b直接指向3的地址。这样,就出现了a与b同时均指向3的情况,即共享了3这个栈数据。. java...
Java中栈的实现
Stack是java集合类中较为常见的一种数据类型,继承了Vector类,是一种先入后出的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。顺带研究了Jdk源码(JDk1.6)empty: /**
java栈 函数如何调用
1、当前正在执行的函数所对应的帧就是当前的帧(位于栈顶),它保存当前函数的局部变量、中间运算结果等数据 2、当函数返回时,栈帧从java栈中被弹出。  java 方法有两种返回函数的方式,一种是正常的函数返回,使用return指令;另外一种 是抛出异常。  以上两种方式都会导致栈帧被弹出。 3、在一个栈帧中,至少包含局部变量表、操作数栈和帧数据几个部分 5、当请求的栈深度大于最大可用
ofo 共享单车的问题
ofo做公司还是要考虑到公司的利益的,做公司不是在做慈善。 如果用户不按照正常情况适用ofo单车,不能怪用户,只是自己没有做好。 ofo这样来看不是一个纯粹的互联网公司,只不过是做了一个自行车app。 自行车就像石沉大海一样,根本不可控呢。北京这么大,投入多少自行车才能有效呢。 我在望京这边,随便能看到的是摩拜的单车,但是ofo的确很少。 因为自行车根本不知道被骑到哪里了。虽然说ofo的自行车便宜,但是被人
SSH框架之Hibernate的关于session缓存面试题
Hibenate中一级缓存,也叫做session的缓存! 一、面试题1: 不同的session是否会共享缓存数据? 1、代码分析: 2、分析: 不会,因为生成2条update的sql语句, 说明不同的session使用不同的缓存区,不能共享。 二、面试题2: iterator与list查询的区别? 1、Iterator 1)N+1查询:N表示所有的记录总数
深入理解Java的栈与堆栈
我想这篇足以让大家很清晰理解Java的栈和堆栈的区别。下面的是我收集了好多网友的资料加以整理的。 Java 中的堆和栈  Java把内存划分成两种:一种是栈内存,一种是堆内存。  1.栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。   2. 栈的优势是,存取速度比堆要快,仅次于直接位于CP
C++面试宝典(整理版)6
101.用递归算法判断数组a[N]是否为一个递增数组。 递归算法特征:相同的处理或判断逻辑,包括相同的输入输出参数。 递归算法注意:1.明确结束递归条件;2.递归趋近于结束条件;3.递归次数过多容易造成栈溢出 递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束: bool fun( int a[], int n ) {   if( n= =1