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);
}