音冢迪光 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高速缓存区的。。
~~~~(>_<)~~~~ 没人知道小云是谁的~\(≧▽≦)/~啦啦啦
仰慕两位大牛啊,我还是没明白。。。
~~~~(>_<)~~~~ 搞清楚这个比较麻烦的~
嗯,看我造化了,下次遇到的时候再把它搞明白,呵呵
恩恩~~