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]