MIME4J-318 Allow disabling buffer recycling
diff --git a/core/src/main/java/org/apache/james/mime4j/util/BufferRecycler.java b/core/src/main/java/org/apache/james/mime4j/util/BufferRecycler.java
index 5fa264b..c89c66c 100644
--- a/core/src/main/java/org/apache/james/mime4j/util/BufferRecycler.java
+++ b/core/src/main/java/org/apache/james/mime4j/util/BufferRecycler.java
@@ -19,11 +19,8 @@
 
 package org.apache.james.mime4j.util;
 
-import java.lang.ref.SoftReference;
 import java.util.ArrayList;
-import java.util.Random;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.atomic.AtomicReferenceArray;
+import java.util.Optional;
 
 /**
  * This is a small utility class, whose main functionality is to allow
@@ -37,6 +34,10 @@
  * to not rely on {@code ThreadLocal} access.
  */
 public class BufferRecycler {
+    static final boolean ENABLED = Optional.ofNullable(System.getProperty("james.mime4j.buffer.recycling.enabled"))
+        .map(Boolean::parseBoolean)
+        .orElse(true);
+
     protected final ArrayList<byte[]>[] _byteBuffers;
     protected final ArrayList<char[]>[] _charBuffers;
     protected final ArrayList<int[]> _intBuffers;
@@ -122,7 +123,9 @@
         if (buffer == null) {
             return;
         }
-        _intBuffers.add(buffer);
+        if (ENABLED) {
+            _intBuffers.add(buffer);
+        }
     }
     
     public final char[] allocCharBuffer(int ix) {
@@ -146,7 +149,9 @@
     }
 
     public void releaseCharBuffer(int ix, char[] buffer) {
-        _charBuffers[ix].add(buffer);
+        if (ENABLED) {
+            _charBuffers[ix].add(buffer);
+        }
     }
 
     protected byte[] balloc(int size) {
diff --git a/core/src/main/java/org/apache/james/mime4j/util/ByteArrayOutputStreamRecycler.java b/core/src/main/java/org/apache/james/mime4j/util/ByteArrayOutputStreamRecycler.java
index a77d0c5..05985ff 100644
--- a/core/src/main/java/org/apache/james/mime4j/util/ByteArrayOutputStreamRecycler.java
+++ b/core/src/main/java/org/apache/james/mime4j/util/ByteArrayOutputStreamRecycler.java
@@ -58,7 +58,7 @@
     }
 
     private void release(UnsynchronizedByteArrayOutputStream value) {
-        if (value != null) {
+        if (value != null && BufferRecycler.ENABLED) {
             value.reset();
             buffers.offer(value);
         }