线程间共享对象的性能影响是什么?

Bar*_*lom 5 java memory concurrency performance multithreading

我知道只要不写入对象,从多个线程中的单个对象读取在Java中是安全的.但是,这样做的性能影响是什么,而不是每个线程复制数据?

线程是否必须等待其他人完成读取内存?或是隐含地复制数据(存在的原因volatile)?但是对于整个JVM的内存使用情况会怎样呢?当读取的对象比读取它的线程更旧而不是在它们的生命周期中创建时,它是如何区别的?

thk*_*ala 3

如果您知道某个对象不会更改(例如 String 或 Integer 等不可变对象)并因此避免使用任何同步构造(synchronizedvolatile),则从多个线程读取该对象不会对性能产生任何影响。所有线程都将并行访问存储对象的内存。

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