You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by al...@apache.org on 2019/06/13 13:26:01 UTC

[ignite] branch master updated: IGNITE-11911 Fixed GridToStringBuilder memory overconsumption - Fixes #6603.

This is an automated email from the ASF dual-hosted git repository.

alexpl pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new 8a6c0d4  IGNITE-11911 Fixed GridToStringBuilder memory overconsumption - Fixes #6603.
8a6c0d4 is described below

commit 8a6c0d4a59f60e595801c2d20e764bb620335058
Author: Aleksey Plekhanov <pl...@gmail.com>
AuthorDate: Thu Jun 13 16:21:05 2019 +0300

    IGNITE-11911 Fixed GridToStringBuilder memory overconsumption - Fixes #6603.
---
 .../internal/util/tostring/SBLimitedLength.java    |  2 +-
 .../util/tostring/GridToStringBuilderSelfTest.java | 33 ++++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/modules/core/src/main/java/org/apache/ignite/internal/util/tostring/SBLimitedLength.java b/modules/core/src/main/java/org/apache/ignite/internal/util/tostring/SBLimitedLength.java
index 640555a..e18e0ed 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/tostring/SBLimitedLength.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/tostring/SBLimitedLength.java
@@ -290,7 +290,7 @@ public class SBLimitedLength extends GridStringBuilder {
             return super.toString();
         else {
             int tailLen = tail.length();
-            StringBuilder res = new StringBuilder(impl().capacity() + tailLen + 100);
+            StringBuilder res = new StringBuilder(impl().length() + tailLen + 100);
 
             res.append(impl());
 
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/util/tostring/GridToStringBuilderSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/util/tostring/GridToStringBuilderSelfTest.java
index 5e220fc..197d346 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/util/tostring/GridToStringBuilderSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/util/tostring/GridToStringBuilderSelfTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.internal.util.tostring;
 
+import com.sun.management.ThreadMXBean;
+import java.lang.management.ManagementFactory;
 import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -554,6 +556,37 @@ public class GridToStringBuilderSelfTest extends GridCommonAbstractTest {
     }
 
     /**
+     * Test GridToStringBuilder memory consumption.
+     */
+    @Test
+    public void testMemoryConsumption() {
+        int objCnt = 100;
+
+        ThreadMXBean bean = (ThreadMXBean)ManagementFactory.getThreadMXBean();
+
+        TestClass2 obj = new TestClass2(new String(new char[1_000_000]));
+
+        List<TestClass2> arr = new ArrayList<>(objCnt);
+
+        for (int i = 1; i <= objCnt; i++)
+            arr.add(new TestClass2(new String(new char[i])));
+
+        GridToStringBuilder.toString(TestClass2.class, obj);
+
+        long allocated0 = bean.getThreadAllocatedBytes(Thread.currentThread().getId());
+
+        for (TestClass2 item : arr)
+            GridToStringBuilder.toString(TestClass2.class, item);
+
+        long allocated1 = bean.getThreadAllocatedBytes(Thread.currentThread().getId());
+
+        log.info("Memory allocated by GridToStringBuilder for " + objCnt + " objects: " + (allocated1 - allocated0));
+
+        assertTrue("Too much memory allocated by GridToStringBuilder: " + (allocated1 - allocated0),
+            allocated1 - allocated0 < 1_000_000);
+    }
+
+    /**
      * @param exp Expected.
      * @param w Wrapper.
      */