trim buffers before recycling
This commit is contained in:
parent
fb619f2394
commit
6a2f340ec0
@ -80,13 +80,11 @@ public final class ChannelOutboundBuffer {
|
|||||||
private static final AtomicLongFieldUpdater<ChannelOutboundBuffer> TOTAL_PENDING_SIZE_UPDATER =
|
private static final AtomicLongFieldUpdater<ChannelOutboundBuffer> TOTAL_PENDING_SIZE_UPDATER =
|
||||||
AtomicLongFieldUpdater.newUpdater(ChannelOutboundBuffer.class, "totalPendingSize");
|
AtomicLongFieldUpdater.newUpdater(ChannelOutboundBuffer.class, "totalPendingSize");
|
||||||
|
|
||||||
@SuppressWarnings({ "unused", "FieldMayBeFinal" })
|
|
||||||
private volatile long totalPendingSize;
|
private volatile long totalPendingSize;
|
||||||
|
|
||||||
private static final AtomicIntegerFieldUpdater<ChannelOutboundBuffer> WRITABLE_UPDATER =
|
private static final AtomicIntegerFieldUpdater<ChannelOutboundBuffer> WRITABLE_UPDATER =
|
||||||
AtomicIntegerFieldUpdater.newUpdater(ChannelOutboundBuffer.class, "writable");
|
AtomicIntegerFieldUpdater.newUpdater(ChannelOutboundBuffer.class, "writable");
|
||||||
|
|
||||||
@SuppressWarnings({ "unused", "FieldMayBeFinal" })
|
|
||||||
private volatile int writable = 1;
|
private volatile int writable = 1;
|
||||||
|
|
||||||
private ChannelOutboundBuffer(Handle handle) {
|
private ChannelOutboundBuffer(Handle handle) {
|
||||||
@ -468,16 +466,9 @@ public final class ChannelOutboundBuffer {
|
|||||||
} finally {
|
} finally {
|
||||||
tail = unflushed;
|
tail = unflushed;
|
||||||
inFail = false;
|
inFail = false;
|
||||||
|
|
||||||
// null out the nio buffers array so the can be GC'ed
|
|
||||||
// https://github.com/netty/netty/issues/1763
|
|
||||||
Arrays.fill(nioBuffers, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RECYCLER.recycle(this, handle);
|
recycle();
|
||||||
|
|
||||||
// Set the channel to null so it can be GC'ed ASAP
|
|
||||||
channel = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void safeRelease(Object message) {
|
private static void safeRelease(Object message) {
|
||||||
@ -494,6 +485,27 @@ public final class ChannelOutboundBuffer {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void recycle() {
|
||||||
|
if (this.buffer.length > INITIAL_CAPACITY) {
|
||||||
|
Entry[] e = new Entry[INITIAL_CAPACITY];
|
||||||
|
System.arraycopy(this.buffer, 0, e, 0, INITIAL_CAPACITY);
|
||||||
|
this.buffer = e;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.nioBuffers.length > INITIAL_CAPACITY) {
|
||||||
|
this.nioBuffers = new ByteBuffer[INITIAL_CAPACITY];
|
||||||
|
} else {
|
||||||
|
// null out the nio buffers array so the can be GC'ed
|
||||||
|
// https://github.com/netty/netty/issues/1763
|
||||||
|
Arrays.fill(nioBuffers, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set the channel to null so it can be GC'ed ASAP
|
||||||
|
channel = null;
|
||||||
|
|
||||||
|
RECYCLER.recycle(this, handle);
|
||||||
|
}
|
||||||
|
|
||||||
private static final class Entry {
|
private static final class Entry {
|
||||||
Object msg;
|
Object msg;
|
||||||
ChannelPromise promise;
|
ChannelPromise promise;
|
||||||
|
Loading…
Reference in New Issue
Block a user