Author: davsclaus
Date: Wed Jan 5 17:32:37 2011
New Revision: 1055545
URL: http://svn.apache.org/viewvc?rev=1055545&view=rev
Log:
CAMEL-3500: Headers on message and properties on Exchange is now using string
interning for Camel keys, to reduce memory consumption.
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CaseInsensitiveMap.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java?rev=1055545&r1=1055544&r2=1055545&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
Wed Jan 5 17:32:37 2011
@@ -83,7 +83,9 @@ public final class DefaultExchange imple
public Exchange copy() {
DefaultExchange exchange = new DefaultExchange(this);
- exchange.setProperties(safeCopy(getProperties()));
+ if (hasProperties()) {
+ exchange.setProperties(safeCopy(getProperties()));
+ }
safeCopy(exchange.getIn(), getIn());
if (hasOut()) {
safeCopy(exchange.getOut(), getOut());
@@ -111,16 +113,16 @@ public final class DefaultExchange imple
public Object getProperty(String name) {
if (hasProperties()) {
+ if (name.startsWith("Camel")) {
+ name = name.intern();
+ }
return properties.get(name);
}
return null;
}
public Object getProperty(String name, Object defaultValue) {
- Object answer = null;
- if (hasProperties()) {
- answer = properties.get(name);
- }
+ Object answer = getProperty(name);
return answer != null ? answer : defaultValue;
}
@@ -149,6 +151,11 @@ public final class DefaultExchange imple
}
public void setProperty(String name, Object value) {
+ // use intern String for properties which is Camel* properties
+ // this reduces memory allocations needed for those common properties
+ if (name != null && name.startsWith("Camel")) {
+ name = name.intern();
+ }
if (value != null) {
// avoid the NullPointException
getProperties().put(name, value);
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CaseInsensitiveMap.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/util/CaseInsensitiveMap.java?rev=1055545&r1=1055544&r2=1055545&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CaseInsensitiveMap.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/util/CaseInsensitiveMap.java
Wed Jan 5 17:32:37 2011
@@ -55,12 +55,12 @@ public class CaseInsensitiveMap extends
public CaseInsensitiveMap(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
- originalKeys = new HashMap<String, String>(initialCapacity);
+ originalKeys = new HashMap<String, String>(initialCapacity,
loadFactor);
}
public CaseInsensitiveMap(int initialCapacity) {
super(initialCapacity);
- originalKeys = new HashMap<String, String>();
+ originalKeys = new HashMap<String, String>(initialCapacity);
}
@Override
@@ -80,15 +80,32 @@ public class CaseInsensitiveMap extends
// invalidate views as we mutate
entrySetView = null;
String s = assembleKey(key);
- originalKeys.put(s, key);
+ if (key.startsWith("Camel")) {
+ // use intern String for headers which is Camel* headers
+ // this reduces memory allocations needed for those common headers
+ originalKeys.put(s, key.intern());
+ } else {
+ originalKeys.put(s, key);
+ }
return super.put(s, value);
}
@Override
public synchronized void putAll(Map<? extends String, ?> map) {
+ entrySetView = null;
if (map != null && !map.isEmpty()) {
for (Map.Entry<? extends String, ?> entry : map.entrySet()) {
- put(entry.getKey(), entry.getValue());
+ String key = entry.getKey();
+ Object value = entry.getValue();
+ String s = assembleKey(key);
+ if (key.startsWith("Camel")) {
+ // use intern String for headers which is Camel* headers
+ // this reduces memory allocations needed for those common
headers
+ originalKeys.put(s, key.intern());
+ } else {
+ originalKeys.put(s, key);
+ }
+ super.put(s, value);
}
}
}