Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-6706797

Heavy Lock Contention using ObjectInputStream

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Duplicate
    • Icon: P4 P4
    • None
    • 6u10
    • core-libs

      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...

            Unassigned Unassigned
            ryeung Roger Yeung (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: