> roughly 1.79 GB or 1.40% of the GC pressure during performance testing

On a curious sidenote, what profiler do you use to get to these numbers?
 @jakobbuchgraber you can use Java Mission Control for this.
 @jakobbuchgraber I used Java Mission Control's Flight Record to get this data.

CompositeByteBuf.deallocate memory improvement
In profiling my application, I have noticed that `CompositeByteBuf.deallocate` generates `java.util.ArrayList$Itr` roughly 1.79 GB or 1.40% of the GC pressure during performance testing. This is due to it using the 'enhanced' for-loop.  This can be resolved by converting to the old-style for loop as shown below:

From:

``` java
for (Component c: components) {
    c.freeIfNecessary();
}
```

To:

``` java
int size = components.size();
for (int i = 0; i < size; i++) {
    components.get(i).freeIfNecessary();
}
```

Tomorrow, when I'm more awake, I'll submit a pull request if @normanmaurer or @trustin don't get to it before me :smile: 

buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java
buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java
diff --git a/buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java b/buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java
index 818c97569f4..d5cf14c27da 100644
--- a/buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java
+++ b/buffer/src/main/java/io/netty/buffer/CompositeByteBuf.java
@@ -1599,8 +1599,11 @@ protected void deallocate() {
         }
 
         freed = true;
-        for (Component c: components) {
-            c.freeIfNecessary();
+        int size = components.size();
+        // We're not using foreach to avoid creating an iterator.
+        // see https://github.com/netty/netty/issues/2642
+        for (int i = 0; i < size; i++) {
+            components.get(i).freeIfNecessary();
         }
 
         if (leak != null) {
