首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JVM能缓存对象的字段吗?

JVM能缓存对象的字段吗?
EN

Stack Overflow用户
提问于 2017-04-18 15:35:25
回答 1查看 228关注 0票数 1
代码语言:javascript
复制
private final Point p;
void synchronized setPoint(int x, int y) {
    p.x=x;
    p.y=y;
}
Point getPoint() {
    return p;
}

假设A类有最后的参考场点p。

  • Point p对象是在A类构造函数中创建的。
  • 类A需要线程安全,所以有一个同步设置器setPoint来更改p的内部字段。

因为引用p是最终的,所以我们不需要费心在多线程环境中读取引用本身。但是对象的内部数据呢?

JVM可以将p的内部数据存储在缓存中以供任何正在运行的线程使用吗?

一般来说,JVM是否将数据从堆(而不是从堆栈)存储到缓存?如果是这样的话,应该如何处理这些字段,因为挥发性关键字只影响引用本身,而不影响引用对象?或者,离开getter并没有可见性问题还可以吗?

EN

回答 1

Stack Overflow用户

发布于 2017-04-18 15:45:42

你的问题有点笼统。

什么JVM?他们有很多,也有很多不同的版本。

我熟悉HotSpot和OpenJDK JVM(我已经读过他们的大部分代码),他们中没有人会费心去“缓存”对象,因为大多数流行的CPU本身已经更高效了。

如果您从不同线程读取或写入任何共享数据,请将该字段(或字段)与synchronized关键字同步。它将确保可见性和适当的内存排序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43476475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档