Author: rgodfrey
Date: Thu May  9 10:00:28 2013
New Revision: 1480584

URL: http://svn.apache.org/r1480584
Log:
QPID-4824 : [Java AMQP 1.0] Reduce memory usage of codec

Modified:
    
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/CompoundWriter.java
    
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/UnsignedLongWriter.java
    
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java

Modified: 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/CompoundWriter.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/CompoundWriter.java?rev=1480584&r1=1480583&r2=1480584&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/CompoundWriter.java
 (original)
+++ 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/CompoundWriter.java
 Thu May  9 10:00:28 2013
@@ -31,7 +31,6 @@ public abstract class CompoundWriter<V> 
     private Registry _registry;
     private static final int LARGE_COMPOUND_THRESHOLD_COUNT = 25;
     private ValueWriter _delegate;
-    private Map<Class, ValueWriter> _writerCache = new HashMap<Class, 
ValueWriter>();
 
     public CompoundWriter(final Registry registry)
     {
@@ -305,7 +304,7 @@ public abstract class CompoundWriter<V> 
         for(int i = 0; i < getCount(); i++)
         {
             Object val = next();
-            ValueWriter writer = _registry.getValueWriter(val, _writerCache);
+            ValueWriter writer = _registry.getValueWriter(val);
             if(writer == null)
             {
                 // TODO

Modified: 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/UnsignedLongWriter.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/UnsignedLongWriter.java?rev=1480584&r1=1480583&r2=1480584&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/UnsignedLongWriter.java
 (original)
+++ 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/codec/UnsignedLongWriter.java
 Thu May  9 10:00:28 2013
@@ -127,7 +127,7 @@ public class UnsignedLongWriter implemen
         {
             _delegate = _zeroByteWriter;
         }
-        else if(ulong.compareTo(UnsignedLong.valueOf(256))<0)
+        else if((ulong.longValue() & 0xffL) == ulong.longValue())
         {
             _delegate = _oneByteWriter;
         }

Modified: 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java?rev=1480584&r1=1480583&r2=1480584&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java
 (original)
+++ 
qpid/trunk/qpid/java/amqp-1-0-common/src/main/java/org/apache/qpid/amqp_1_0/type/codec/AMQPDescribedTypeRegistry.java
 Thu May  9 10:00:28 2013
@@ -298,102 +298,71 @@ public class AMQPDescribedTypeRegistry i
 
 
     private final Map<Class, ValueWriter.Factory> _writerMap = new 
HashMap<Class, ValueWriter.Factory>();
-    private final Map<Class, ValueWriter> _cachedWriters = new 
HashMap<Class,ValueWriter>();
 
     public <V extends Object> ValueWriter<V> getValueWriter(V value, 
Map<Class, ValueWriter> localCache)
     {
-        Class<? extends Object> clazz = value == null ? Void.TYPE : 
value.getClass();
-        ValueWriter writer = null; // TODO localCache.get(clazz);
-        if(writer == null || !writer.isComplete())
-        {
-            writer = getValueWriter(value);
-            localCache.put(clazz, writer);
-        }
-        else
-        {
-            writer.setValue(value);
-        }
+        return getValueWriter(value);
 
-
-        return writer;
     }
 
 
     public <V extends Object> ValueWriter<V> getValueWriter(V value)
     {
+        ValueWriter writer;
 
         Class<? extends Object> clazz = value == null ? Void.TYPE : 
value.getClass();
 
-        ValueWriter writer = null; // TODO _cachedWriters.get(clazz);
-        if(writer == null || !writer.isComplete())
+        ValueWriter.Factory<V> factory = (ValueWriter.Factory<V>) 
(_writerMap.get(clazz));
+
+        if(factory == null)
         {
-            ValueWriter.Factory<V> factory = (ValueWriter.Factory<V>) 
(_writerMap.get(clazz));
+            if(value instanceof List)
+            {
+                factory = _writerMap.get(List.class);
+                _writerMap.put(value.getClass(), factory);
+                writer = factory.newInstance(this);
+                writer.setValue(value);
 
-            if(factory == null)
+            }
+            else if(value instanceof Map)
             {
-                if(value instanceof List)
-                {
-                    factory = _writerMap.get(List.class);
-                    _writerMap.put(value.getClass(), factory);
-                    writer = factory.newInstance(this);
-                    if(writer.isCacheable())
-                    {
-                        _cachedWriters.put(clazz, writer);
-                    }
-                    writer.setValue(value);
+                factory = _writerMap.get(Map.class);
+                _writerMap.put(value.getClass(), factory);
+                writer = factory.newInstance(this);
+                writer.setValue(value);
 
-                }
-                else if(value instanceof Map)
+            }
+            else if(value.getClass().isArray())
+            {
+                
if(RestrictedType.class.isAssignableFrom(value.getClass().getComponentType()))
                 {
-                    factory = _writerMap.get(Map.class);
-                    _writerMap.put(value.getClass(), factory);
-                    writer = factory.newInstance(this);
-                    if(writer.isCacheable())
+                    RestrictedType[] restrictedTypes = (RestrictedType[]) 
value;
+                    Object[] newVals = (Object[]) 
Array.newInstance(restrictedTypes[0].getValue().getClass(),
+                                                                    
restrictedTypes.length);
+                    for(int i = 0; i < restrictedTypes.length; i++)
                     {
-                        _cachedWriters.put(clazz, writer);
+                        newVals[i] = restrictedTypes[i].getValue();
                     }
-                    writer.setValue(value);
-
+                    return (ValueWriter<V>) getValueWriter(newVals);
                 }
-                else if(value.getClass().isArray())
-                {
-                    
if(RestrictedType.class.isAssignableFrom(value.getClass().getComponentType()))
-                    {
-                        RestrictedType[] restrictedTypes = (RestrictedType[]) 
value;
-                        Object[] newVals = (Object[]) 
Array.newInstance(restrictedTypes[0].getValue().getClass(),
-                                                                        
restrictedTypes.length);
-                        for(int i = 0; i < restrictedTypes.length; i++)
-                        {
-                            newVals[i] = restrictedTypes[i].getValue();
-                        }
-                        return (ValueWriter<V>) getValueWriter(newVals);
-                    }
-                    // TODO primitive array types
-                    factory = _writerMap.get(List.class);
-                    writer = factory.newInstance(this);
-                    writer.setValue(Arrays.asList((Object[])value));
+                // TODO primitive array types
+                factory = _writerMap.get(List.class);
+                writer = factory.newInstance(this);
+                writer.setValue(Arrays.asList((Object[])value));
 
-                }
-                else
-                {
-                    return null;
-                }
             }
             else
             {
-                writer = factory.newInstance(this);
-                if(writer.isCacheable())
-                {
-                    _cachedWriters.put(clazz, writer);
-                }
-                writer.setValue(value);
+                return null;
             }
         }
         else
         {
+            writer = factory.newInstance(this);
             writer.setValue(value);
         }
 
+
         return writer;
 
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to