[Fwd: Thread group disposal question]

Artem Ananiev Artem.Ananiev at Sun.COM
Fri Aug 22 05:07:29 PDT 2008

Hi, Xiaobin,

thanks to David, the deadlock seems to be caused by improper AWT tree 
lock usage, so the question about Unsafe.park() calls is now: why there 
are so many pool-XX-thread-X threads are alive and parking? I'll try to 
check the swap file usage, but I doubt this can be a cause of the problem.



Xiaobin Lu wrote:
> The hang isn't caused by the Unsafe calls, sun.misc.Unsafe is used 
> explicitly by the new java.util.concurrent.locks package. I assume if 
> the application is in a deadlock situation, you could detect the hang by 
> attaching the process to Jconsole which has a deadlock detection 
> functionality built in, see 
> http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html#DeadlockDetection 
> for more details on this. Another possibility of the hang is the 
> resource restraint, meaning that the application isn't getting the 
> memory resource it needs. Would you look at the prstat output (or top 
> output) to see whether the system is out of swap when the hang occurs?
> -Xiaobin
> James Melvin wrote:
>> Can anyone help Artem?
>> - Jim
>> -------- Original Message --------
>> Subject: Thread group disposal question
>> Date: Thu, 21 Aug 2008 17:26:58 +0400
>> From: Artem Ananiev <Artem.Ananiev at Sun.COM>
>> To: hotspot-runtime-dev at openjdk.java.net
>> Hi, hotspot team,
>> (I'm not sure if hotspot-runtime-dev is a right alias for the questions
>> like this, but I haven't found anything better)
>> my question is about the right way to destroy a Thread or ThreadGroup.
>> In a few words, some application periodically creates and destroys
>> instances of sun.awt.AppContext (which roughly corresponds to a
>> ThreadGroup instance). After a small number of iterations application
>> just hangs - the stack trace is attached.
>> The log shows a number of threads waiting for Unsafe.park() calls. I
>> suspect this happens because AppContext class stops all the threads in
>> its ThreadGroup with ThreadGroup.stop() and then destroys the group
>> itself with ThreadGroup.destroy(). If any details are required, this
>> code can be easily found in JDK source tree:
>> jdk/src/share/classes/sun/awt/AppContext.java
>> The question is whether the hang can be caused by using these unsafe
>> methods, and whether I can workaround it in any way.
>> Thanks,
>> Artem

More information about the hotspot-runtime-dev mailing list