和小云聊堆栈

音冢迪光 23:27:24
问个问题
小云 23:27:24

音冢迪光 23:27:25

音冢迪光 23:27:57
堆栈 是在 工作内存中的是吧?
堆是在 主存中的 吼?
小云 23:28:26
什么叫工作内存和主存,有什么区别?
音冢迪光 23:28:26

音冢迪光 23:28:37
JMM中的概念额
小云 23:28:48
堆、栈,一个在下,一个在上
音冢迪光 23:28:49

小云 23:29:01
一个是new的东西,一个是临时变量
音冢迪光 23:29:02

音冢迪光 23:29:13
恩 知道
音冢迪光 23:29:37
在上  的地址值低是吗?
音冢迪光 23:29:42
栈区
小云 23:29:43
它的工作内存的意思,就是当前上下文环境吧
音冢迪光 23:29:44

小云 23:30:00
而堆是在庞大的区域,共享,于是叫主存了
音冢迪光 23:30:00

小云 23:30:19
顶端是0
音冢迪光 23:30:20

音冢迪光 23:30:37
栈放 变量
变量只想 堆中的 对象?
音冢迪光 23:30:44
变量指向 堆中的 对象?
小云 23:31:01
变量改为引用
音冢迪光 23:31:02

小云 23:31:25
preference
音冢迪光 23:31:26

音冢迪光 23:31:34
p?
小云 23:31:37
或者为primitive
音冢迪光 23:31:38

音冢迪光 23:31:45
哦哦
音冢迪光 23:31:51
这个概念是哪里看的?
音冢迪光 23:31:58
preference
小云 23:32:05
java一切皆引用啊
音冢迪光 23:32:06

音冢迪光 23:32:15
这个我知道
小云 23:32:15
最基础的java书就有
音冢迪光 23:32:15

音冢迪光 23:32:26
preference 这个英文 iten
音冢迪光 23:32:30
我指
小云 23:32:30
说错了,reference ^
音冢迪光 23:32:31

小云 23:32:33
……
音冢迪光 23:32:33

音冢迪光 23:32:35
。。。
音冢迪光 23:32:37
- -
小云 23:32:50
英文不好……
音冢迪光 23:32:51

音冢迪光 23:33:03
是你打错字了
音冢迪光 23:33:05
- -
音冢迪光 23:33:09
我确实是这么想的
但是这样
音冢迪光 23:33:13
我疑问更大。。。
小云 23:33:16
为啥?
音冢迪光 23:33:17

音冢迪光 23:33:28
多线程。
小云 23:33:33
怎么?
音冢迪光 23:33:34

音冢迪光 23:33:42
每个线程有自己的栈~
小云 23:33:45

音冢迪光 23:33:46

音冢迪光 23:34:02
执行的时候 是对栈中的数据进行操作
jvm负责控制同步
音冢迪光 23:34:07
到主存
音冢迪光 23:34:13
然后问题就来了。。
小云 23:34:16
恩?
音冢迪光 23:34:17

音冢迪光 23:34:58
栈不是都是 堆中变量的引用么。
那对栈的数据的操作不就是对堆的数据的操作了?
为什么还有同步一说?

音冢迪光 23:35:01
何解?
小云 23:35:11
是啊
音冢迪光 23:35:12

小云 23:35:27
所以需要sycronise这个关键字啊
音冢迪光 23:35:28

小云 23:35:33
同步代码是要自己写的啊
音冢迪光 23:35:33

音冢迪光 23:35:42
这个知道
小云 23:35:50
那个单词肯定又写错了,反正就是同步的意思
音冢迪光 23:35:51

音冢迪光 23:36:34
我是不明白为什么需要同步 按照
“栈不是都是 堆中变量的引用么。
那对栈的数据的操作不就是对堆的数据的操作了?
为什么还有同步一说?”
这样说 不是都是同步的。。
小云 23:37:16
不懂你啥意思
音冢迪光 23:37:17

音冢迪光 23:37:25
那对栈的数据的操作不就是对堆的数据的操作了?

小云 23:37:28
对的
音冢迪光 23:37:29

音冢迪光 23:37:37
为什么还有同步一说?

音冢迪光 23:37:48
堆已经同步了。
音冢迪光 23:37:50
这样。
小云 23:38:06
堆默认不同步啊,同步代码要自己写啊
音冢迪光 23:38:07

音冢迪光 23:38:40
栈不是都是 堆中变量的引用么。就是存的是地址是不?
小云 23:38:59
对,4个字节
音冢迪光 23:39:00

音冢迪光 23:39:37
- -
小云 23:39:41
有人睡了
音冢迪光 23:39:42

音冢迪光 23:39:45
哦。。。。
音冢迪光 23:40:47
线程中是对 栈操作
然后栈里面的引用指向 堆。
那么对栈的操作不是就是对堆的操作?
为什么要同步? 我这迷惑
小云 23:41:11
你可以不同步啊
音冢迪光 23:41:12

小云 23:41:31
不同步的话,堆的数据正确性就无法保证啊
音冢迪光 23:41:32

音冢迪光 23:42:11
为什么无法保证?不是对栈里面变量的操作 不是 就是堆它引用的对象的操作么。。。
音冢迪光 23:42:16
- -
音冢迪光 23:42:28
你一定要把我搞明白 – -
小云 23:43:02
不懂你的意思
音冢迪光 23:43:03

音冢迪光 23:43:07
- -
音冢迪光 23:43:41
栈存堆中变量的引用 对吧?
小云 23:44:01

音冢迪光 23:44:02

音冢迪光 23:44:11
这个引用就是堆中对象的地址 对不?
小云 23:44:36

音冢迪光 23:44:36

音冢迪光 23:45:13
那么对这个栈中的引用进行操作 不是就是 对堆中的对象进行操作  对不?
音冢迪光 23:45:23
同步的?
小云 23:45:46
我先问你,你对同步的理解是什么?
音冢迪光 23:45:47

小云 23:46:22
是指引用指向的对象的更改和堆的对象的更改保持一致?
音冢迪光 23:46:23

音冢迪光 23:46:44
恩。
小云 23:46:55
这个必须同步啊
音冢迪光 23:46:55

小云 23:47:12
我指的同步是指线程同步啊
音冢迪光 23:47:13

小云 23:47:29
你这个同步压根和线程没关系啊
音冢迪光 23:47:29

音冢迪光 23:47:46
哦。。。。。。。
小云 23:48:01
如果你的操作都是原子性的话,肯定是同步的,引用改了,就是对象改了
音冢迪光 23:48:02

音冢迪光 23:48:28
恩 明白
小云 23:48:38
非原子性的话,你可能在改的过程中被其他线程又改了
音冢迪光 23:48:39

音冢迪光 23:49:08
明白了 我咋这么笨呢
小云 23:49:18
我的同步只是针对堆中那个实际的对象而言,那么多线程同时对他操作,他怎么保持数据同步
音冢迪光 23:49:19

音冢迪光 23:49:30
。。。恩。。。
音冢迪光 23:49:55
我把多线程环境的同步 和单线程环境的同步混淆了 导致我疑惑。。
小云 23:49:54
当然还要排除CPU cache等的考虑
音冢迪光 23:49:55

音冢迪光 23:50:09
对了~
音冢迪光 23:50:24
线程中的变量是 存在 cpu高速缓存区的。。

6 comments

  1. Stariy 说到:

    :evil: 我晕啊晕啊晕啊晕,你都没有征得我同意…囧啊

    • 产品经理新视线 说到:

      ~~~~(>_<)~~~~ 没人知道小云是谁的~\(≧▽≦)/~啦啦啦

  2. xiaoduan 说到:

    仰慕两位大牛啊,我还是没明白。。。

发布评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*

无觅相关文章插件,快速提升流量