What does flushing thread local memory to global memory mean?

Posted by Jack Griffith on Stack Overflow See other posts from Stack Overflow or by Jack Griffith
Published on 2010-03-22T20:52:24Z Indexed on 2010/03/22 21:01 UTC
Read the original article Hit count: 325

Filed under:
|
|
|

Hi,

I am aware that the purpose of volatile variables in Java is that writes to such variables are immediately visible to other threads. I am also aware that one of the effects of a synchronized block is to flush thread-local memory to global memory.

I have never fully understood the references to 'thread-local' memory in this context. I understand that data which only exists on the stack is thread-local, but when talking about objects on the heap my understanding becomes hazy.

I was hoping that to get comments on the following points:

  1. When executing on a machine with multiple processors, does flushing thread-local memory simply refer to the flushing of the CPU cache into RAM?

  2. When executing on a uniprocessor machine, does this mean anything at all?

  3. If it is possible for the heap to have the same variable at two different memory locations (each accessed by a different thread), under what circumstances would this arise? What implications does this have to garbage collection? How aggressively do VMs do this kind of thing?

Overall, I think am trying to understand whether thread-local means memory that is physically accessible by only one CPU or if there is logical thread-local heap partitioning done by the VM?

Any links to presentations or documentation would be immensely helpful. I have spent time researching this, and although I have found lots of nice literature, I haven't been able to satisfy my curiosity regarding the different situations & definitions of thread-local memory.

Thanks very much.

© Stack Overflow or respective owner

Related posts about java

Related posts about threading