changeset 20:195c1a644550

benchmark add
author tatsuki
date Tue, 17 Mar 2015 15:37:19 +0900
parents 17cc11b04157
children c8d8864714d4
files .project .settings/org.eclipse.jdt.core.prefs src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/.DS_Store src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/AtomicBench.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/AtomicReferenceTest.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/ReadTree.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/ReadTreeThread.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/ReplaceRootNodeAtBench.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/readAtomicReservableReferenceThread.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/oldTree/GetOldTreeTime.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/treemap/FJTreeMapSetTime.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/treemap/UntilTreeMapPutTime.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/treemap/UtilTreeMapMemery.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/treemap/functionalJavaTreeMapMemory.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/ReadJungleThread.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TimeMeasurementCreateIndex.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TransactionPerSecondMeasurement.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TransactionPerSecondMeasurementSeparation.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/WriteJungleThread.java src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/extendXmlTree.java
diffstat 20 files changed, 617 insertions(+), 59 deletions(-) [+]
line wrap: on
line diff
--- a/.project	Sun Feb 15 02:06:57 2015 +0900
+++ b/.project	Tue Mar 17 15:37:19 2015 +0900
@@ -1,14 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <projectDescription>
-  <name>jungle-bench</name>
-  <comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
-  <projects/>
-  <buildSpec>
-    <buildCommand>
-      <name>org.eclipse.jdt.core.javabuilder</name>
-    </buildCommand>
-  </buildSpec>
-  <natures>
-    <nature>org.eclipse.jdt.core.javanature</nature>
-  </natures>
-</projectDescription>
\ No newline at end of file
+	<name>jungle-bench</name>
+	<comment/>
+	<projects/>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments/>
+		</buildCommand>
+	</buildSpec>
+	<linkedResources/>
+</projectDescription>
--- a/.settings/org.eclipse.jdt.core.prefs	Sun Feb 15 02:06:57 2015 +0900
+++ b/.settings/org.eclipse.jdt.core.prefs	Tue Mar 17 15:37:19 2015 +0900
@@ -1,11 +1,13 @@
+#
+#Tue Mar 10 12:09:54 JST 2015
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.source=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
Binary file src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/.DS_Store has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/AtomicBench.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,46 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle_core;
+import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;import java.lang.Integer;import java.lang.InterruptedException;import java.lang.Runtime;import java.lang.String;import java.lang.System;import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Created by e115731 on 15/03/11.
+ */
+public class AtomicBench {
+    public static void main(String args[]) throws IOException {
+        Runtime rt = Runtime.getRuntime();
+        int cpuNum = rt.availableProcessors();
+        System.out.println("CPUCount = " + cpuNum);
+        File file = new File("strCount");
+        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
+
+        AtomicReferenceTest ref = new AtomicReferenceTest(0);
+
+        for (int count = 1; count <= cpuNum; count++) {
+            readAtomicReservableReferenceThread th[] = new readAtomicReservableReferenceThread[count];
+            for (int tcount = 0; tcount < count; tcount++) {
+                th[tcount] = new readAtomicReservableReferenceThread(ref);
+                th[tcount].start();
+            }
+            try {
+                java.lang.Thread.sleep(2000);
+            } catch (InterruptedException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            long readCount = 0;
+
+            for (int tcount = 0; tcount < count; tcount++) {
+                th[tcount].set(false);
+                System.out.println(th[tcount].get());
+                readCount = readCount + th[tcount].get();
+            }
+
+            System.out.println("----------------------Thread Stop--------------------------------------------");
+
+            pw.println(count + " " + readCount);
+            System.out.println("ThreadTest count = " + count);
+            System.out.println("read count = " + (readCount));
+        }
+        pw.close();
+        System.out.println("-----------end--------------------------------------------------------");
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/AtomicReferenceTest.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,52 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle_core;
+
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Created by e115731 on 15/03/15.
+ */
+public class AtomicReferenceTest {
+
+    private AtomicReference<Reservation> reservation;
+
+    public AtomicReferenceTest(Integer num)
+    {
+        reservation = new AtomicReference<Reservation>(new Reservation(num));
+    }
+
+    public Integer get() {
+        return reservation.get().get();
+    }
+
+    public class Reservation {
+        private AtomicReference<Reservation2> reservation;
+
+        public Reservation(Integer num)
+        {
+            reservation = new AtomicReference<Reservation2>(new Reservation2(num));
+        }
+
+
+        public Integer get(){
+            return reservation.get().get();
+        }
+
+        public class Reservation2 {
+            public final AtomicReference<Integer> ref;
+
+            public Reservation2(Integer num)
+            {
+                ref = new AtomicReference<Integer>(num);
+            }
+
+            public void set(Integer num){
+                ref.set(num);
+            }
+
+            public Integer get(){
+                return ref.get();
+            }
+        }
+    }
+
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/ReadTree.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,64 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle_core;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.*;
+import java.nio.ByteBuffer;
+
+/**
+ * Created by e115731 on 15/03/14.
+ */
+public class ReadTree {
+
+    public static void main(String[] args) throws InterruptedException, IOException, ParserConfigurationException, SAXException {
+        System.out.println("startReadTree");
+
+        Runtime rt = Runtime.getRuntime();
+        int cpuNum = rt.availableProcessors();
+
+        File file = new File("./time/readTree");
+        DefaultJungle jungle = new DefaultJungle(null,"sample", new DefaultTreeEditor(new DefaultTraverser()));
+        jungle.createNewTree("hoge");
+        JungleTree tree = jungle.getTreeByName("hoge");
+        JungleTreeEditor editor = tree.getTreeEditor();
+        editor = editor.putAttribute(new DefaultNodePath(), "test", ByteBuffer.wrap("test".getBytes())).b();
+        editor.success();
+
+        PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
+        for (int THREAD_COUNT = 1; THREAD_COUNT <= cpuNum; THREAD_COUNT++) {
+            ReadTreeThread readThread[] = new ReadTreeThread[THREAD_COUNT];
+            ;
+            for (int count = 0; THREAD_COUNT > count; count++) {
+                readThread[count] = new ReadTreeThread(tree);
+            }
+
+            for (int count = 0; THREAD_COUNT > count; count++) {
+                readThread[count].start();
+            }
+
+            System.out.println("StartThread");
+
+            Thread.sleep(1000);
+            long readCount = 0;
+
+            for (int count = 0; THREAD_COUNT > count; count++) {
+                readCount = readCount + readThread[count].getFindCount();
+                readThread[count].set(false);
+            }
+
+            pw.println(THREAD_COUNT + " " + readCount);
+            System.out.println(THREAD_COUNT + "readCount = " + readCount);
+        }
+
+        pw.close();
+    }
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/ReadTreeThread.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,48 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle_core;
+
+import jp.ac.u_ryukyu.cr.ie.tatsuki.xmlTestBbs.JuGrix;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
+
+import java.util.Random;
+
+/**
+ * Created by e115731 on 15/03/14.
+ */
+public class ReadTreeThread extends Thread {
+
+    JungleTree tree;
+    private long findCount;
+
+    boolean loop = true;
+
+    public ReadTreeThread(JungleTree tree) {
+        this.tree = tree;
+        this.findCount = 0;
+    }
+
+    public long getFindCount() {
+        System.out.println("thread count = " + findCount);
+        return findCount;
+    }
+
+    public void set(boolean loop) {
+        this.loop = loop;
+    }
+
+    @Override
+    public void run() {
+        while (loop) {
+        TreeNode root = tree.getRootNode();
+        if (root.getAttributes().getString("test").equals("test"))
+            findCount++;
+        else
+            System.out.println("faild");
+ //       String attribute = root.getAttributes().getString("test");
+   //     if (attribute.equals("test"))
+  //          findCount++;
+  //      else
+   //         System.out.println("faild");
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/ReplaceRootNodeAtBench.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,91 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle_core;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.lang.management.ManagementFactory;
+import java.lang.management.ThreadMXBean;
+
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
+
+public class ReplaceRootNodeAtBench {
+
+  public static void main(String args[]) throws IOException, InterruptedException {
+    System.out.println("Start");
+    File addNewChildFile = new File("./time/addNewChildTime");
+    PrintWriter apw = new PrintWriter(new BufferedWriter(new FileWriter(addNewChildFile)));
+    File pushPopFile = new File("./time/pushPopTime");
+    PrintWriter ppw = new PrintWriter(new BufferedWriter(new FileWriter(pushPopFile)));
+
+    ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();
+    long t1 = 0;
+    long t2 = 0;
+
+    for (int count = 0; count <= 40; count++) {
+
+      System.out.println("count = " + count);
+      Jungle jungle = new DefaultJungle(null, "hogehoge", new DefaultTreeEditor(new DefaultTraverser()));
+      jungle.createNewTree("normalTree");
+      JungleTree tree = jungle.getTreeByName("normalTree");
+      JungleTreeEditor editor = tree.getTreeEditor();
+      DefaultNodePath path = new DefaultNodePath();
+
+      t1 = threadMXBean.getCurrentThreadCpuTime();
+      for (int addCount = 0; addCount < 100 * count; addCount++) {
+        Either<Error, JungleTreeEditor> either = editor.addNewChildAt(path, 0);
+        if (either.isA()) {
+          System.out.println("Error");
+          System.exit(0);
+        }
+        editor = either.b();
+        path = path.add(0);
+      }
+
+      editor.success();
+      t2 = threadMXBean.getCurrentThreadCpuTime();
+      System.out.println("NormalTime = " + (t2 - t1));
+      apw.println(count * 100 + " " + (t2 - t1));
+
+
+      jungle.createNewTree("push/popTree");
+      JungleTree pushPopTree = jungle.getTreeByName("push/popTree");
+      JungleTreeEditor pushPopEditor = pushPopTree.getTreeEditor();
+
+      t1 = threadMXBean.getCurrentThreadCpuTime();
+      for (int addCount = 0; addCount < count * 100; addCount++) {
+        Either<Error, JungleTreeEditor> either = pushPopEditor.replaceNewRootNode();
+        if (either.isA()) {
+          System.out.println("Error");
+          System.exit(0);
+        }
+        pushPopEditor = either.b();
+      }
+      pushPopEditor.success();
+      t2 = threadMXBean.getCurrentThreadCpuTime();
+      System.out.println("push/popTime = " + (t2 - t1));
+      ppw.println(count * 100 + " " + (t2 - t1));
+
+
+      // gc
+      jungle = null;
+      tree = null;
+      editor = null;
+      pushPopTree = null;
+      pushPopEditor = null;
+      System.gc();
+      Thread.sleep(1000);
+    }
+    apw.close();
+    ppw.close();
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/jungle_core/readAtomicReservableReferenceThread.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,37 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.jungle_core;
+import java.lang.Integer;import java.lang.Override;import java.lang.Thread;import java.util.concurrent.atomic.AtomicReference;
+
+public class readAtomicReservableReferenceThread extends Thread {
+
+    AtomicReferenceTest ref;
+    boolean flag;
+    long findcount;
+    public readAtomicReservableReferenceThread(AtomicReferenceTest ref) {
+        this.flag = true;
+        this.ref = ref;
+    }
+
+    @Override
+    public void run() {
+        while (flag) {
+            if (ref.get() == 0)
+            findcount ++;
+            else
+                System.out.println("faild");
+//      try {
+//        Thread.sleep(1);
+//      } catch (InterruptedException e) {
+//        // TODO Auto-generated catch block
+//        e.printStackTrace();
+//      }
+        }
+    }
+
+    public long get() {
+        return findcount;
+    }
+
+    public void set(boolean flag) {
+        this.flag = flag;
+    }
+}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/oldTree/GetOldTreeTime.java	Sun Feb 15 02:06:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/oldTree/GetOldTreeTime.java	Tue Mar 17 15:37:19 2015 +0900
@@ -8,7 +8,6 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Either;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.util.Error;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/treemap/FJTreeMapSetTime.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,50 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.treemap;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Random;
+
+import fj.Ord;
+import fj.data.TreeMap;
+
+public class FJTreeMapSetTime {
+
+  public static void main(String args[]) throws IOException {
+    System.out.println("put");
+    File putFile = new File("./time/fjPut");
+    PrintWriter putPw = new PrintWriter(new BufferedWriter(new FileWriter(putFile)));
+    File getFile = new File("./time/newFjGet");
+    PrintWriter getPw = new PrintWriter(new BufferedWriter(new FileWriter(getFile)));
+    TreeMap<Integer, Integer> map = TreeMap.empty(Ord.intOrd);
+    long t1 = 0;
+    long t2 = 0;
+    long t3 = 0;
+    long t4 = 0;
+    for (int count = 0; count <= 30000; count++) {
+      t1 = System.currentTimeMillis();
+      map = map.set(count, count);
+      t2 = System.currentTimeMillis();
+      if (count % 100 == 0 && count != 0) {
+        System.out.println("put time " + " " + (t2 - t1));
+        long sum = 0;
+        for (int count1 = 0; count1 < 20; count1++) {
+          Random ran = new Random();
+          int getValue = ran.nextInt(count);
+          t3 = System.currentTimeMillis();
+          map.get(getValue);
+          t4 = System.currentTimeMillis();
+          sum = sum + (t4 - t3);
+        }
+        System.out.println("get time = " + (sum / 20));
+        putPw.println(count + " " + (t2 - t1));
+        getPw.println(count + " " + (sum / 20));
+      }
+    }
+    putPw.close();
+    getPw.close();
+  }
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/treemap/UntilTreeMapPutTime.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,31 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.treemap;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.TreeMap;
+
+public class UntilTreeMapPutTime {
+
+  public static void main(String args[]) throws IOException {
+    File file = new File("./time/untilGet");
+    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
+    TreeMap<Integer, Integer> map = new TreeMap<Integer,Integer>();
+    for (int count = 0; count <= 30000; count++) {
+      long t1 = System.currentTimeMillis();
+      map.put(count, count);
+      long t2 = System.currentTimeMillis();
+      map.get(count);
+      long t3 = System.currentTimeMillis();
+      if ((count % 100) == 0) {
+      System.out.println("put time " + count + " " + (t2 - t1));
+      System.out.println("get time " + count + " " + (t3 - t2));
+
+      pw.println(count + " " + (t3 - t2));
+      }
+    }
+    pw.close();
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/treemap/UtilTreeMapMemery.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,38 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.treemap;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.LinkedList;
+import java.util.TreeMap;
+
+
+public class UtilTreeMapMemery {
+
+  public static void main(String args[]) throws IOException {
+    File getFile = new File("./time/utilMemory");
+    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(getFile)));
+    TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
+    LinkedList<TreeMap<Integer, Integer>> list = new LinkedList<TreeMap<Integer, Integer>>();
+    list.add(map);
+    for (Integer count = 0; count <= 10000; count++) {
+      TreeMap<Integer, Integer> newMap = list.getLast();
+      TreeMap<Integer, Integer> copyMap = new TreeMap<Integer, Integer>(newMap);
+      copyMap.put(count, count);
+      list.add(copyMap);
+      long used = getMemory();
+      System.out.println(count + " " + used);
+      pw.println(count + " " + used);
+    }
+    pw.close();
+  }
+
+  public static long getMemory() {
+    long free = Runtime.getRuntime().freeMemory() / 1024;
+    long total = Runtime.getRuntime().totalMemory() / 1024;
+    long used = total - free;
+    return used;
+  }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/treemap/functionalJavaTreeMapMemory.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,38 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.treemap;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.LinkedList;
+
+import fj.Ord;
+import fj.data.TreeMap;
+
+
+public class functionalJavaTreeMapMemory {
+  public static void main(String args[]) throws IOException {
+    File getFile = new File("./time/fjMemory");
+    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(getFile)));
+    TreeMap<Integer, Integer> map = TreeMap.empty(Ord.intOrd);
+    LinkedList<TreeMap<Integer, Integer>> list = new LinkedList<TreeMap<Integer, Integer>>();
+    list.add(map);
+    for (Integer count = 0; count <= 10000; count++) {
+      TreeMap<Integer, Integer> newMap = list.getLast();
+      TreeMap<Integer, Integer> copyMap = newMap.set(count, count);
+      list.add(copyMap);
+      long used = getMemory();
+      System.out.println(count + " " + used);
+      pw.println(count + " " + used);
+    }
+    pw.close();
+  }
+
+  public static long getMemory() {
+    long free = Runtime.getRuntime().freeMemory() / 1024;
+    long total = Runtime.getRuntime().totalMemory() / 1024;
+    long used = total - free;
+    return used;
+  }
+}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/ReadJungleThread.java	Sun Feb 15 02:06:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/ReadJungleThread.java	Tue Mar 17 15:37:19 2015 +0900
@@ -1,25 +1,26 @@
 package jp.ac.u_ryukyu.ie.cr.tatsuki.xml;
 
-import java.util.Iterator;
 import java.util.Random;
-
 import jp.ac.u_ryukyu.cr.ie.tatsuki.xmlTestBbs.JuGrix;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.InterfaceTraverser;
+
 
 public class ReadJungleThread extends Thread {
 
     JuGrix jugrix;
     int findCount;
+    int successCount;
+    int faildCount;
     boolean loop = true;
 
     public ReadJungleThread(JuGrix jugrix) {
         this.jugrix = jugrix;
         this.findCount = 0;
+        this.successCount = 0;
+        this.faildCount = 0;
     }
 
     public int getFindCount() {
+      System.out.println("thread count = " + findCount);
         return findCount;
     }
 
@@ -36,7 +37,10 @@
 
             String value = String.valueOf(rnd.nextInt(400));
             boolean account = jugrix.isActive("p:" + value,"v:1");
-          // System.out.println(account);
+            if (account)
+              successCount++;
+            else
+              faildCount++;
         }
     }
 }
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TimeMeasurementCreateIndex.java	Sun Feb 15 02:06:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TimeMeasurementCreateIndex.java	Tue Mar 17 15:37:19 2015 +0900
@@ -11,9 +11,12 @@
 import javax.xml.parsers.SAXParser;
 import javax.xml.parsers.SAXParserFactory;
 
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.TreeContext;
 import org.xml.sax.SAXException;
 
+import fj.Ord;
 import fj.data.List;
+import fj.data.TreeMap;
 import ac.jp.u_ryukyu.cr.ie.tatsuki.xmlReader.ReadXmlHandler;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungleTree;
@@ -22,16 +25,14 @@
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.ChangeList;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.persistent.NullJournal;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.ChangeSet;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
+import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.TreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.operations.TreeOperation;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultChangeSet;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeContext;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.transaction.DefaultTreeNode;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
-import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.Index;
 import jp.ac.u_ryukyu.ie.cr.tatsuki.jungle.store.index.ParentIndex;
 
 public class TimeMeasurementCreateIndex {
@@ -63,7 +64,7 @@
     }
   }
 
-  private static JungleTree createJungleTree(String name) {
+  private static JungleTree createJungleTree(final String name) {
     ChangeList list = new ChangeList() {
       @Override
       public Iterator<TreeOperation> iterator() {
@@ -84,11 +85,11 @@
     };
 
     DefaultTreeNode root = new DefaultTreeNode();
-    Index index = new Index();
+    TreeMap<String, TreeMap<String, TreeMap<TreeNode, TreeNode>>> indexList = TreeMap.empty(Ord.stringOrd);
+ //   TreeMap<TreeNode, TreeNode> parentIndex = new ParentIndex().getParentIndex();
     ParentIndex parentIndex = new ParentIndex();
-    ChangeSet set = new DefaultChangeSet(root, null, list, "hoge", name, 0, index.getIndex(),
+    TreeContext tc = new DefaultTreeContext(root, null, list, "hoge", name, 0, indexList,
         parentIndex.getParentIndex());
-    DefaultTreeContext tc = new DefaultTreeContext(root, set);
     JungleTree newTree = new DefaultJungleTree(tc, "hoge", new NullJournal().getWriter(), new DefaultTreeEditor(
         new DefaultTraverser()));
     return newTree;
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TransactionPerSecondMeasurement.java	Sun Feb 15 02:06:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TransactionPerSecondMeasurement.java	Tue Mar 17 15:37:19 2015 +0900
@@ -13,25 +13,14 @@
 import org.xml.sax.SAXException;
 
 import jp.ac.u_ryukyu.cr.ie.tatsuki.xmlTestBbs.JuGrix;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.DefaultJungle;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.Jungle;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.NodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultTreeEditor;
-import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.traverser.DefaultTraverser;
 
 public class TransactionPerSecondMeasurement {
 
   public static void main(String[] args) throws InterruptedException, IOException, ParserConfigurationException, SAXException {
-//   Jungle jungle = new DefaultJungle(null, "hoge", new DefaultTreeEditor(new DefaultTraverser()));
-//    JungleTree tree = jungle.createNewTree("testTree");
-//    JungleTreeEditor editor = tree.getTreeEditor();
-//    editor = createTree(0, new DefaultNodePath(), editor);
-    JuGrix jugrix = extendXmlTree.createJuGrix(true,100);
-    System.out.println("endCreatejugrixa ");
-//    editor = editor.success().b();
+    System.out.println("endCreatejugrix");
+    JuGrix jugrix = extendXmlTree.createJuGrix(true,400);
      System.out.println(Runtime.getRuntime().availableProcessors());
 
     if (args.length > 0) {
@@ -47,15 +36,19 @@
 
   private static void readAndWrite(JuGrix jugrix) throws InterruptedException, IOException {
     System.out.println("read and write");
-    File file = new File("./time/readAndWrite");
+    Runtime rt = Runtime.getRuntime();
+    int cpuNum = rt.availableProcessors();
+    
+    File file = new File("./time/newTransactionReadAndWrite");
     PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
-    for (int THREAD_COUNT = 1; THREAD_COUNT <= 12; THREAD_COUNT++) {
+
+    for (int THREAD_COUNT = 1; THREAD_COUNT <= cpuNum; THREAD_COUNT++) {
       ReadJungleThread readThread[] = new ReadJungleThread[THREAD_COUNT];
       for (int count = 0; THREAD_COUNT > count; count++) {
         readThread[count] = new ReadJungleThread(jugrix);
       }
 
-      WriteJungleThread writeThread =  new WriteJungleThread(null);
+      WriteJungleThread writeThread =  new WriteJungleThread(jugrix);
       writeThread.start();
       for (int count = 0; THREAD_COUNT > count; count++) {
         readThread[count].start();
@@ -70,7 +63,6 @@
       for (int count = 0; THREAD_COUNT > count; count++) {
         readCount = readCount + readThread[count].getFindCount();
         readThread[count].set(false);
-        System.out.println(readThread[count].getFindCount());
       }
 
 
@@ -82,10 +74,13 @@
   }
 
   private static void readOnly(JuGrix jugrix) throws InterruptedException, IOException {
-    System.out.println("read onlya");
+    System.out.println("read only");
+    Runtime rt = Runtime.getRuntime();
+    int cpuNum = rt.availableProcessors();
+
     File file = new File("./time/readOnly");
     PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
-    for (int THREAD_COUNT = 1; THREAD_COUNT <= 12; THREAD_COUNT++) {
+    for (int THREAD_COUNT = 1; THREAD_COUNT <= cpuNum; THREAD_COUNT++) {
       ReadJungleThread readThread[] = new ReadJungleThread[THREAD_COUNT];
       ;
       for (int count = 0; THREAD_COUNT > count; count++) {
@@ -104,11 +99,12 @@
       for (int count = 0; THREAD_COUNT > count; count++) {
         readCount = readCount + readThread[count].getFindCount();
         readThread[count].set(false);
-        System.out.println(readThread[count].getFindCount());
       }
+      
       pw.println(THREAD_COUNT + " " + readCount);
       System.out.println(THREAD_COUNT + "readCount = " + readCount);
     }
+    
     pw.close();
   }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/TransactionPerSecondMeasurementSeparation.java	Tue Mar 17 15:37:19 2015 +0900
@@ -0,0 +1,58 @@
+package jp.ac.u_ryukyu.ie.cr.tatsuki.xml;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+import javax.xml.parsers.ParserConfigurationException;
+import jp.ac.u_ryukyu.cr.ie.tatsuki.xmlTestBbs.JuGrix;
+import org.xml.sax.SAXException;
+
+public class TransactionPerSecondMeasurementSeparation {
+
+  public static void main(String[] args) throws InterruptedException, IOException, ParserConfigurationException,
+      SAXException {
+    System.out.println("endCreatejugrix");
+    
+    Runtime rt = Runtime.getRuntime();
+    int cpuNum = rt.availableProcessors();
+    System.out.println("CPUCOUNT = " + cpuNum);
+    File file = new File("./time/copyJungleReadOnly");
+
+    JuGrix jugrix[] = new JuGrix[cpuNum];
+    for (int THREAD_COUNT = 0; THREAD_COUNT < cpuNum; THREAD_COUNT++) {
+      jugrix[THREAD_COUNT] = extendXmlTree.createJuGrix(true, 400);
+    }
+    
+    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file)));
+    for (int THREAD_COUNT = 1; THREAD_COUNT <= cpuNum; THREAD_COUNT++) {
+      ReadJungleThread readThread[] = new ReadJungleThread[THREAD_COUNT];
+
+      for (int count = 0; THREAD_COUNT > count; count++) {
+        readThread[count] = new ReadJungleThread(jugrix[count]);
+      }
+
+      for (int count = 0; THREAD_COUNT > count; count++) {
+        readThread[count].start();
+      }
+
+      System.out.println("StartThread");
+
+      Thread.sleep(1000);
+      int readCount = 0;
+
+      for (int count = 0; THREAD_COUNT > count; count++) {
+        readThread[count].set(false);
+        readCount = readCount + readThread[count].getFindCount();
+      }
+
+      pw.println(THREAD_COUNT + " " + readCount);
+      System.out.println(THREAD_COUNT + "readCount = " + readCount);
+    }
+
+    pw.close();
+  }
+
+}
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/WriteJungleThread.java	Sun Feb 15 02:06:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/WriteJungleThread.java	Tue Mar 17 15:37:19 2015 +0900
@@ -2,6 +2,7 @@
 
 import java.nio.ByteBuffer;
 
+import jp.ac.u_ryukyu.cr.ie.tatsuki.xmlTestBbs.JuGrix;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTree;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.JungleTreeEditor;
 import jp.ac.u_ryukyu.ie.cr.shoshi.jungle.store.impl.DefaultNodePath;
@@ -13,9 +14,9 @@
   int writeCount;
   boolean loop = true;
 
-  public WriteJungleThread(JungleTree tree) {
-    this.tree = tree;
-    this.editor = tree.getTreeEditor();
+  public WriteJungleThread(JuGrix jugrix) {
+    this.tree = jugrix.getPersonTree();
+    editor = tree.getTreeEditor();
     this.writeCount = 0;
   }
 
@@ -30,7 +31,7 @@
   @Override
   public void run() {
     while (loop) {
-      editor = editor.putAttribute(new DefaultNodePath(), "KEY", ByteBuffer.wrap("2".getBytes())).b();
+      editor = editor.putAttribute(new DefaultNodePath().add(0), "element", ByteBuffer.wrap("Persons".getBytes())).b();
       editor = editor.success().b();
       writeCount++;
 
--- a/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/extendXmlTree.java	Sun Feb 15 02:06:57 2015 +0900
+++ b/src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/xml/extendXmlTree.java	Tue Mar 17 15:37:19 2015 +0900
@@ -84,7 +84,7 @@
   }
 
   public static JungleTreeEditor extendsTree(JungleTreeEditor editor, JungleTree orgTree, JungleTree roleTree, int count) {
-    Random rdm = new Random();
+    Random rdm = new Random(System.currentTimeMillis());
     int orgNum = rdm.nextInt(30);
     String orgId = "o:" + String.valueOf(orgNum);
     String orgRoleId = searchOrgRole(orgTree, orgId);