"Java语言规范中指出:为了获得最佳速度,允许线程保存共享成员变量的私有拷贝,而且只当线程进入或者离开同步代码块时才与共享成员变量的原始值对比。"
为什么保存私有拷贝,速度就能提升呢?
还有,这个私有拷贝保存在哪里?frame中的local variable吗?
如果这个共享成员是非primitive的对象,那是不是还要在heap中深克隆这个对象吗?
[b]问题补充:[/b]
"每条线程都有自己的工作内存(Working Memory),工作内存中保存的是主存中某些变量的拷贝,线程对所有变量的操作都是在工作内存中进行,线程之间无法相互直接访问,变量传递均需要通过主存完成。"
JVM的内存模型需要考虑cpu的缓存吗?我以为JVM为每条线程创建的工作内存也是在内存上,所以我就不明白为什么要copy一分到工作内存以提高性能?