IGNITE-471 - Marshalling fixes
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/9564fca9 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/9564fca9 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/9564fca9 Branch: refs/heads/ignite-471 Commit: 9564fca94e2216986c6c0c1fd94bb5f988aa74f6 Parents: 75cdbb0 Author: Valentin Kulichenko <[email protected]> Authored: Mon Mar 16 01:06:31 2015 -0700 Committer: Valentin Kulichenko <[email protected]> Committed: Mon Mar 16 01:06:31 2015 -0700 ---------------------------------------------------------------------- .../internal/util/io/GridUnsafeDataInput.java | 33 +++++++++++++++----- .../internal/util/io/GridUnsafeDataOutput.java | 12 ++++++- .../optimized/OptimizedMarshaller.java | 2 +- 3 files changed, 37 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9564fca9/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java index 1c1c03e..9943a5c 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java @@ -19,7 +19,9 @@ package org.apache.ignite.internal.util.io; import org.apache.ignite.internal.util.*; import org.apache.ignite.internal.util.tostring.*; +import org.apache.ignite.internal.util.typedef.*; import org.apache.ignite.internal.util.typedef.internal.*; +import org.apache.ignite.lang.*; import sun.misc.*; import java.io.*; @@ -63,13 +65,21 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { /** Length of char buffer (for reading strings). */ private static final int CHAR_BUF_SIZE = 256; + /** */ + private static final ThreadLocal<IgniteBiTuple<byte[], char[]>> UTF_BUF_TC = + new ThreadLocal<IgniteBiTuple<byte[], char[]>>() { + @Override protected IgniteBiTuple<byte[], char[]> initialValue() { + return F.t(new byte[MAX_BLOCK_SIZE], new char[CHAR_BUF_SIZE]); + } + }; + /** Buffer for reading general/block data. */ @GridToStringExclude - private final byte[] utfBuf = new byte[MAX_BLOCK_SIZE]; + private byte[] utfBuf; /** Char buffer for fast string reads. */ @GridToStringExclude - private final char[] urfCBuf = new char[CHAR_BUF_SIZE]; + private char[] utfCBuf; /** Current offset into buf. */ private int pos; @@ -93,7 +103,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { /** Buffer for reading from stream. */ @GridToStringExclude - private byte[] inBuf = new byte[1024]; + private byte[] inBuf; /** Maximum message size. */ private int maxOff; @@ -117,7 +127,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { @Override public void inputStream(InputStream in) throws IOException { this.in = in; - buf = inBuf; + buf = inBuf = new byte[1024]; } /** @@ -467,6 +477,13 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { /** {@inheritDoc} */ @Override public String readUTF() throws IOException { + if (utfBuf == null || utfCBuf == null) { + IgniteBiTuple<byte[], char[]> t = UTF_BUF_TC.get(); + + utfBuf = t.get1(); + utfCBuf = t.get2(); + } + return readUTFBody(readInt()); } @@ -539,7 +556,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { case 6: case 7: // 1 byte format: 0xxxxxxx - urfCBuf[cpos++] = (char)b1; + utfCBuf[cpos++] = (char)b1; break; @@ -551,7 +568,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { if ((b2 & 0xC0) != 0x80) throw new UTFDataFormatException(); - urfCBuf[cpos++] = (char)(((b1 & 0x1F) << 6) | (b2 & 0x3F)); + utfCBuf[cpos++] = (char)(((b1 & 0x1F) << 6) | (b2 & 0x3F)); break; @@ -565,7 +582,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { if ((b2 & 0xC0) != 0x80 || (b3 & 0xC0) != 0x80) throw new UTFDataFormatException(); - urfCBuf[cpos++] = (char)(((b1 & 0x0F) << 12) | ((b2 & 0x3F) << 6) | (b3 & 0x3F)); + utfCBuf[cpos++] = (char)(((b1 & 0x0F) << 12) | ((b2 & 0x3F) << 6) | (b3 & 0x3F)); break; @@ -586,7 +603,7 @@ public class GridUnsafeDataInput extends InputStream implements GridDataInput { } } - sbuf.append(urfCBuf, 0, cpos); + sbuf.append(utfCBuf, 0, cpos); return pos - start; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9564fca9/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java index 573b92b..63325a0 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java @@ -54,8 +54,15 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput /** Length of char buffer (for writing strings). */ private static final int CHAR_BUF_SIZE = 256; + /** */ + private static final ThreadLocal<char[]> CBUF_TC = new ThreadLocal<char[]>() { + @Override protected char[] initialValue() { + return new char[CHAR_BUF_SIZE]; + } + }; + /** Char buffer for fast string writes. */ - private final char[] cbuf = new char[CHAR_BUF_SIZE]; + private char[] cbuf; /** Bytes. */ private byte[] bytes; @@ -375,6 +382,9 @@ public class GridUnsafeDataOutput extends OutputStream implements GridDataOutput /** {@inheritDoc} */ @Override public void writeUTF(String s) throws IOException { + if (cbuf == null) + cbuf = CBUF_TC.get(); + writeUTF(s, utfLength(s)); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9564fca9/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java index 6da89de..500df8b 100644 --- a/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java +++ b/modules/core/src/main/java/org/apache/ignite/marshaller/optimized/OptimizedMarshaller.java @@ -77,7 +77,7 @@ import java.nio.*; */ public class OptimizedMarshaller extends AbstractMarshaller { /** Default initial buffer size. */ - private static final int DFLT_INIT_BUF_SIZE = 4 * 1024; + private static final int DFLT_INIT_BUF_SIZE = 16; /** Default class loader. */ private final ClassLoader dfltClsLdr = getClass().getClassLoader();
