Mercurial > hg4j
diff src/org/tmatesoft/hg/repo/HgManifest.java @ 264:6bb5e7ed051a
Optimize memory usage (reduce number of objects instantiated) when pooling file names and nodeids during manifest parsing
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Fri, 19 Aug 2011 03:36:25 +0200 |
parents | 3dcd3dd90c77 |
children | 0a2f445de774 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgManifest.java Thu Aug 18 18:06:44 2011 +0200 +++ b/src/org/tmatesoft/hg/repo/HgManifest.java Fri Aug 19 03:36:25 2011 +0200 @@ -29,6 +29,7 @@ import org.tmatesoft.hg.internal.Experimental; import org.tmatesoft.hg.internal.Lifecycle; import org.tmatesoft.hg.internal.Pool; +import org.tmatesoft.hg.internal.Pool2; import org.tmatesoft.hg.internal.RevlogStream; import org.tmatesoft.hg.util.Path; @@ -149,19 +150,20 @@ boolean end(int manifestRevision); } - private static class ManifestParser implements RevlogStream.Inspector { + private static class ManifestParser implements RevlogStream.Inspector/*, Lifecycle*/ { private boolean gtg = true; // good to go private final Inspector inspector; - private Pool<Nodeid> nodeidPool; - private final Pool<String> fnamePool; + private Pool2<Nodeid> nodeidPool, thisRevPool; + private final Pool2<String> fnamePool; private final Pool<String> flagsPool; public ManifestParser(Inspector delegate) { assert delegate != null; inspector = delegate; - nodeidPool = new Pool<Nodeid>(); - fnamePool = new Pool<String>(); + nodeidPool = new Pool2<Nodeid>(); + fnamePool = new Pool2<String>(); flagsPool = new Pool<String>(); + thisRevPool = new Pool2<Nodeid>(); } public void next(int revisionNumber, int actualLen, int baseRevision, int linkRevision, int parent1Revision, int parent2Revision, byte[] nodeid, DataAccess da) { @@ -170,7 +172,6 @@ } try { gtg = gtg && inspector.begin(revisionNumber, new Nodeid(nodeid, true), linkRevision); - Pool<Nodeid> thisRevPool = new Pool<Nodeid>(nodeidPool.size()); // supply hint to minimize map resize/rehash String fname = null; String flags = null; Nodeid nid = null; @@ -216,11 +217,22 @@ // (next manifest is likely to refer to most of them, although in specific cases // like commit in another branch a lot may be useless) nodeidPool.clear(); + Pool2<Nodeid> t = nodeidPool; nodeidPool = thisRevPool; + thisRevPool = t; } catch (IOException ex) { throw new HgBadStateException(ex); } } +// +// public void start(int count, Callback callback, Object token) { +// } +// +// public void finish(Object token) { +// System.out.println(fnamePool); +// System.out.println(nodeidPool); +// System.out.printf("Free mem once parse done: %,d\n", Runtime.getRuntime().freeMemory()); +// } } private static class RevisionMapper implements RevlogStream.Inspector, Lifecycle {