java - 在线程之间共享对象对性能有何影响?

标签 java multithreading performance memory concurrency

我知道在 Java 中跨多个线程读取单个对象是安全的,只要该对象没有被写入。但是,这样做而不是按线程复制数据对性能有何影响?

线程是否必须等待其他人完成对内存的读取?还是数据被隐式复制(volatile存在的原因)?但是这对整个 JVM 的内存使用有什么影响呢?当被读取的对象比读取它的线程更旧而不是在其生命周期中创建时,这一切有何不同?

最佳答案

如果您知道一个对象不会改变(例如不可变对象(immutable对象),如 String 或 Integer),因此避免使用任何同步结构(synchronized , volatile), 从多个线程读取该对象对性能没有任何影响。所有线程都将并行访问存储对象的内存。

但是,出于性能原因,JVM 可能会选择在每个线程中本地缓存一些值。 volatile 的使用禁止了这种行为 - JVM 每次都必须显式地和原子地访问 volatile 字段。

关于java - 在线程之间共享对象对性能有何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6545655/

相关文章:

c - 多线程->调度。核心转储

java - 无法将多个客户端添加到此 Java 聊天中

multithreading - Delphi Seattle 10,多线程/核心性能

java - 在 Spring 中为 MethodArgumentNotValidException 添加参数到 @ExceptionHandler

java - Java 中使用 for 循环的多线程

c++ - 具有自动超频功能的多核处理器上的准确 C/C++ 时钟?

django - 随着执行更多插入,Django 应用程序中的数据库插入逐渐变慢

Java LinkedHashMap 替换键

java - 创建和填充表的顺序

java - 当连接在事务中关闭时会发生什么?