IBM User Guide for Java V7 on Windows > Troubleshooting and support > Using diagnostic tools > Using Javadump > Interpreting a Javadump
Locks, monitors, and deadlocks (LOCKS)
An example of the LOCKS component part of a Javadump taken during a deadlock.
A lock typically prevents more than one entity from accessing a shared resource. Each object in the Java™ language has an associated lock, also referred to as a monitor, which a thread obtains by using a synchronized method or block of code. In the case of the JVM, threads compete for various resources in the JVM and locks on Java objects.
When you take a Java dump, the JVM attempts to detect deadlock cycles. The JVM can detect cycles that consist of locks that are obtained through synchronization,
locks that extend the java.util.concurrent.locks.AbstractOwnableSynchronizer class, or a mix of both lock types.
The following example is from a deadlock test program where two threads, "DeadLockThread 0" and "DeadLockThread 1", unsuccessfully attempt to synchronize on a java/lang/String object, and lock an instance of the java.util.concurrent.locks.ReentrantLock class.
The Locks section in the example (highlighted) shows that thread "DeadLockThread 1" locked the object instance java/lang/String@0x00007F5E5E18E3D8. The monitor was created as a result of a Java code fragment such as synchronize(aString), and this monitor has "DeadLockThread 0" waiting to get a lock on this same object instance (aString). The deadlock section also shows an instance of the java.util.concurrentlocks.ReentrantLock$NonfairSync class, that is locked by "DeadLockThread 0", and has "Deadlock Thread 1" waiting.
This classic deadlock situation is caused by an error in application design; the Javadump tool is a major tool in the detection of such events.
Blocked thread information is also available in the Threads section of the Java dump, in lines that begin with 3XMTHREADBLOCK, for threads that are blocked, waiting or parked. For more information, see Blocked thread information.
NULL ------------------------------------------------------------------------ 0SECTION LOCKS subcomponent dump routine NULL =============================== NULL 1LKPOOLINFO Monitor pool info: 2LKPOOLTOTAL Current total number of monitors: 2 NULL 1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors): 2LKMONINUSE sys_mon_t:0x00007F5E24013F10 infl_mon_t: 0x00007F5E24013F88: 3LKMONOBJECT java/lang/String@0x00007F5E5E18E3D8: Flat locked by "Deadlock Thread 1" (0x00007F5E84362100), entry count 1 3LKWAITERQ Waiting to enter: 3LKWAITER "Deadlock Thread 0" (0x00007F5E8435BD00) NULL 1LKREGMONDUMP JVM System Monitor Dump (registered monitors): 2LKREGMON Thread global lock (0x00007F5E84004F58): <unowned> 2LKREGMON &(PPG_mem_mem32_subAllocHeapMem32.monitor) lock (0x00007F5E84005000): <unowned> 2LKREGMON NLS hash table lock (0x00007F5E840050A8): <unowned> < lines removed for brevity > 1LKDEADLOCK Deadlock detected !!! NULL --------------------- NULL 2LKDEADLOCKTHR Thread "Deadlock Thread 0" (0x00007F5E8435BD00) 3LKDEADLOCKWTR is waiting for: 4LKDEADLOCKMON sys_mon_t:0x00007F5E24013F10 infl_mon_t: 0x00007F5E24013F88: 4LKDEADLOCKOBJ java/lang/String@0x00007F5E5E18E3D8 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread "Deadlock Thread 1" (0x00007F5E84362100) 3LKDEADLOCKWTR which is waiting for: 4LKDEADLOCKOBJ java/util/concurrent/locks/ReentrantLock$NonfairSync@0x00007F5E7E1464F0 3LKDEADLOCKOWN which is owned by: 2LKDEADLOCKTHR Thread "Deadlock Thread 0" (0x00007F5E8435BD00)
Parent: Interpreting a Javadump
Error 404 - Not Found Error 404 - Not Found
The document you are looking for may have been removed or re-named. Please contact the web site owner for further assistance.