# HG changeset patch # User Lukas Stadler # Date 1401290064 -7200 # Node ID aef229a61f96a34ac6207607c0af8cad6be269a4 # Parent e4567f9acc4297dfb4e070a1f0755eaf7ad7aa8e grow NodeMaps exponentially diff -r e4567f9acc42 -r aef229a61f96 graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java --- a/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java Wed May 28 12:17:16 2014 +0200 +++ b/graal/com.oracle.graal.graph.test/src/com/oracle/graal/graph/test/NodeMapTest.java Wed May 28 17:14:24 2014 +0200 @@ -121,17 +121,4 @@ map.setAndGrow(newNode, 1); assertEquals((Integer) 1, map.get(newNode)); } - - @Test(expected = AssertionError.class) - public void testNewSetAndGrowMultiple() { - TestNode newNode = graph.add(new TestNode()); - map.setAndGrow(newNode, 1); - assertEquals((Integer) 1, map.get(newNode)); - /* - * Failing here is not required, but if this behavior changes, usages of getAndGrow and - * setAndGrow need to be checked for compatibility. - */ - TestNode newNode2 = graph.add(new TestNode()); - map.get(newNode2); - } } diff -r e4567f9acc42 -r aef229a61f96 graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeMap.java --- a/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeMap.java Wed May 28 12:17:16 2014 +0200 +++ b/graal/com.oracle.graal.graph/src/com/oracle/graal/graph/NodeMap.java Wed May 28 17:14:24 2014 +0200 @@ -28,6 +28,8 @@ public class NodeMap extends NodeIdAccessor { + private static final int MIN_REALLOC_SIZE = 16; + protected Object[] values; public NodeMap(Graph graph) { @@ -54,7 +56,7 @@ private void checkAndGrow(Node node) { if (isNew(node)) { - this.values = Arrays.copyOf(values, graph.nodeIdCount()); + this.values = Arrays.copyOf(values, Math.max(MIN_REALLOC_SIZE, graph.nodeIdCount() * 3 / 2)); } assert check(node); }