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

Reply via email to