-
Enhancement
-
Resolution: Duplicate
-
P4
-
None
-
6u10
-
x86
-
linux
A DESCRIPTION OF THE REQUEST :
Our application deserializes the same class in hundreds of threads pretty much all the time. We've hit a bottleneck in ObjectInputStream that is causing all threads to wait on a global ReferenceQueue. Here's the common stack trace seen in 500 threads:
- waiting to lock <0x00002aab4cd568d8> (a java.lang.ref.ReferenceQueue$Lock)
at java.io.ObjectStreamClass.processQueue(ObjectStreamClass.java:2234)
at java.io.ObjectStreamClass.getReflector(ObjectStreamClass.java:2066)
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:602)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at com.danga.MemCached.MemCachedClient.loadItems(MemCachedClient.java:1547)
JUSTIFICATION :
This type of concurrency problem is not acceptable.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Threads should not have this contention.
ACTUAL -
Threads are blocked on a global shared Queue.
CUSTOMER SUBMITTED WORKAROUND :
Haven't found one yet...
Our application deserializes the same class in hundreds of threads pretty much all the time. We've hit a bottleneck in ObjectInputStream that is causing all threads to wait on a global ReferenceQueue. Here's the common stack trace seen in 500 threads:
- waiting to lock <0x00002aab4cd568d8> (a java.lang.ref.ReferenceQueue$Lock)
at java.io.ObjectStreamClass.processQueue(ObjectStreamClass.java:2234)
at java.io.ObjectStreamClass.getReflector(ObjectStreamClass.java:2066)
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:602)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at com.danga.MemCached.MemCachedClient.loadItems(MemCachedClient.java:1547)
JUSTIFICATION :
This type of concurrency problem is not acceptable.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
Threads should not have this contention.
ACTUAL -
Threads are blocked on a global shared Queue.
CUSTOMER SUBMITTED WORKAROUND :
Haven't found one yet...
- duplicates
-
JDK-6525425 (ref) heavy lock contention during object serialization on Solaris10/T2000
-
- Resolved
-