Some time ago someone on this list pointed to a paper from Sun folks
about this subject.

>From what I remember, they tried the folllowing tecniques:

-Pooling on back-edges and call/return, using ether a boolean flag or
forcing a page-fault at a specific address. They noticed that
page-faulting has a huge latency.

-Dynamic code patching, the thread is stopped and the next reachable
safe-point site is patched to call into the VM instead of following
normal execution. This shown to be very tricky to implement on sparc,
but improves the runtime performance a lot.

Rodrigo

On 8/31/05, Xiao-Feng Li <[EMAIL PROTECTED]> wrote:
> Thread suspension happens in many situations in JVM, such as for GC,
> for java.lang.Thread.suspend(), etc. There are various techniques to
> suspend a thread. Basically we can classify them into two categories:
> preemptive and voluntary.
> 
> The preemptive approach requires the suspender, say a GC thread,
> suspend the execution of a target thread asynchronously with IPC
> mechanism or OS APIs. If the suspended thread happened to be in a
> region of code (Java or native) that could be enumerated, the live
> references were collected. This kind of region is called safe-region,
> and the suspended point is a safe-point. If the suspended point is not
> in safe-region, the thread would be resumed and stopped again until it
> ended up in a safe-region randomly or on purpose.
> 
> In the other approach that we are now considering, JIT will insert
> code that polls a boolean. The boolean can be thread-specific and  is
> set true by GC thread or VM if there is a need to prevent the Java
> thread's forward progress. The JIT will put the polling code in such
> places as back-edges, call sites and method returns. Actually we are
> thinking of this mechnism in a more general sense. For example,
> green-threads can be implemented in this way for Java threads to
> downcall into JVM scheduler.
> 
> Does anyone have suggestions/data on better approaches?
> 
> Thanks,
> xiaofeng
>

Reply via email to