小编use*_*387的帖子

Java:新对象的分配和缓存一致性

在Java中,假设您有两个线程T1和T2在两个不同的处理器P1和P2上同时运行.

首先,线程T2与obj在(例如)起始存储器位置0x1000处分配的一些对象一起工作.这会导致P2在内部缓存该内存位置的值.T2然后将(仅)对该对象的引用置零,并且它是垃圾收集的.

线程T1然后

    Foo fooRef = new Foo();
    fooRef.x = 10;
Run Code Online (Sandbox Code Playgroud)

它只是发生了fooRef.x位置也是0x1000,因为这个Foo实例被分配重新使用由上面的T2释放的内存.

然后,T1将fooRef引用传递给线程T2(通过队列或其他一些共享内存机制).

T2会从之前看到旧的过时缓存值,还是会看到10的新值?

假设没有硬件缓存一致性机制.当Java为对象解除分配或分配内存时,它本身是否确保清除每个处理器的缓存?(即使存在硬件缓存一致性机制,一致性传播也不是即时的,如果没有采用Java本身的其他一致性度量,T2可能仍然会读取过时值).

java multithreading caching

1
推荐指数
1
解决办法
609
查看次数

标签 统计

caching ×1

java ×1

multithreading ×1