From 7f104d2c01d5655e65f9150e3f7a7a807284e7ac Mon Sep 17 00:00:00 2001 From: wenshao Date: Sun, 7 Oct 2012 21:01:32 +0800 Subject: [PATCH] opimized memory used --- .../druid/support/profile/ProfileStat.java | 7 ++-- .../druid/stat/WebSessionStatTest.java | 34 +++++++++++++++++++ .../druid/stat/WebURIStatMemoryTest.java | 34 +++++++++++++++++++ 3 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/stat/WebSessionStatTest.java create mode 100644 src/test/java/com/alibaba/druid/stat/WebURIStatMemoryTest.java diff --git a/src/main/java/com/alibaba/druid/support/profile/ProfileStat.java b/src/main/java/com/alibaba/druid/support/profile/ProfileStat.java index c9a3de9b49..fbec2743ae 100644 --- a/src/main/java/com/alibaba/druid/support/profile/ProfileStat.java +++ b/src/main/java/com/alibaba/druid/support/profile/ProfileStat.java @@ -6,7 +6,10 @@ import java.util.concurrent.ConcurrentHashMap; public class ProfileStat { - private ConcurrentHashMap entries = new ConcurrentHashMap(); + private ConcurrentHashMap entries = new ConcurrentHashMap( + 16, + 0.75f, + 1); public ConcurrentHashMap getEntries() { return entries; @@ -16,7 +19,7 @@ public class ProfileStat { if (requestStatsMap == null) { return; } - + for (Map.Entry entry : requestStatsMap.entrySet()) { ProfileEntryKey entryKey = entry.getKey(); ProfileEntryReqStat reqEntryStat = entry.getValue(); diff --git a/src/test/java/com/alibaba/druid/stat/WebSessionStatTest.java b/src/test/java/com/alibaba/druid/stat/WebSessionStatTest.java new file mode 100644 index 0000000000..98ab6249dd --- /dev/null +++ b/src/test/java/com/alibaba/druid/stat/WebSessionStatTest.java @@ -0,0 +1,34 @@ +package com.alibaba.druid.stat; + +import java.lang.management.ManagementFactory; +import java.text.NumberFormat; + +import junit.framework.TestCase; + +import com.alibaba.druid.support.http.stat.WebSessionStat; + +public class WebSessionStatTest extends TestCase { + + public void test_0() throws Exception { + WebSessionStat item = new WebSessionStat(""); + gc(); + long memoryStart = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed(); + + final int COUNT = 1024 * 1024; + WebSessionStat[] items = new WebSessionStat[COUNT]; + for (int i = 0; i < COUNT; ++i) { + items[i] = new WebSessionStat(""); + // items[i] = Histogram.makeHistogram(20); + } + + long memoryEnd = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed(); + + System.out.println("memory used : " + NumberFormat.getInstance().format(memoryEnd - memoryStart)); + } + + private void gc() { + for (int i = 0; i < 10; ++i) { + System.gc(); + } + } +} diff --git a/src/test/java/com/alibaba/druid/stat/WebURIStatMemoryTest.java b/src/test/java/com/alibaba/druid/stat/WebURIStatMemoryTest.java new file mode 100644 index 0000000000..9499f67c18 --- /dev/null +++ b/src/test/java/com/alibaba/druid/stat/WebURIStatMemoryTest.java @@ -0,0 +1,34 @@ +package com.alibaba.druid.stat; + +import java.lang.management.ManagementFactory; +import java.text.NumberFormat; + +import junit.framework.TestCase; + +import com.alibaba.druid.support.http.stat.WebURIStat; + +public class WebURIStatMemoryTest extends TestCase { + + public void test_0() throws Exception { + WebURIStat item = new WebURIStat(""); + gc(); + long memoryStart = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed(); + + final int COUNT = 1024 * 1024; + WebURIStat[] items = new WebURIStat[COUNT]; + for (int i = 0; i < COUNT; ++i) { + items[i] = new WebURIStat(""); + // items[i] = Histogram.makeHistogram(20); + } + + long memoryEnd = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage().getUsed(); + + System.out.println("memory used : " + NumberFormat.getInstance().format(memoryEnd - memoryStart)); + } + + private void gc() { + for (int i = 0; i < 10; ++i) { + System.gc(); + } + } +}