From c79bbd063f11f99504756a6e391fbffa832a3125 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 5 Feb 2009 06:34:17 +0000 Subject: [PATCH] Reduced the amount of the heap allocated for hexdump generation (512KiB -> 2KiB) --- .../jboss/netty/buffer/ChannelBuffers.java | 23 ++++++------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/src/main/java/org/jboss/netty/buffer/ChannelBuffers.java b/src/main/java/org/jboss/netty/buffer/ChannelBuffers.java index 1be9f6cedf..f14da7a1eb 100644 --- a/src/main/java/org/jboss/netty/buffer/ChannelBuffers.java +++ b/src/main/java/org/jboss/netty/buffer/ChannelBuffers.java @@ -106,15 +106,13 @@ public class ChannelBuffers { */ public static final ChannelBuffer EMPTY_BUFFER = new BigEndianHeapChannelBuffer(0); - private static final char[] HEXDUMP_TABLE = new char[65536 * 4]; + private static final char[] HEXDUMP_TABLE = new char[256 * 4]; static { final char[] DIGITS = "0123456789abcdef".toCharArray(); - for (int i = 0; i < 65536; i ++) { - HEXDUMP_TABLE[(i << 2) + 0] = DIGITS[i >>> 12 & 0x0F]; - HEXDUMP_TABLE[(i << 2) + 1] = DIGITS[i >>> 8 & 0x0F]; - HEXDUMP_TABLE[(i << 2) + 2] = DIGITS[i >>> 4 & 0x0F]; - HEXDUMP_TABLE[(i << 2) + 3] = DIGITS[i >>> 0 & 0x0F]; + for (int i = 0; i < 256; i ++) { + HEXDUMP_TABLE[(i << 1) + 0] = DIGITS[i >>> 4 & 0x0F]; + HEXDUMP_TABLE[(i << 1) + 1] = DIGITS[i >>> 0 & 0x0F]; } } @@ -668,21 +666,14 @@ public class ChannelBuffers { return ""; } - int endIndex = fromIndex + (length >>> 1 << 1); - boolean oddLength = length % 2 != 0; + int endIndex = fromIndex + length; char[] buf = new char[length << 1]; int srcIdx = fromIndex; int dstIdx = 0; - for (; srcIdx < endIndex; srcIdx += 2, dstIdx += 4) { + for (; srcIdx < endIndex; srcIdx ++, dstIdx += 2) { System.arraycopy( - HEXDUMP_TABLE, buffer.getUnsignedShort(srcIdx) << 2, - buf, dstIdx, 4); - } - - if (oddLength) { - System.arraycopy( - HEXDUMP_TABLE, (buffer.getUnsignedByte(srcIdx) << 2) + 2, + HEXDUMP_TABLE, buffer.getUnsignedByte(srcIdx) << 1, buf, dstIdx, 2); }