John, master of JRE collections, Could you review this? For big applications, map's performance can end up being a bottleneck. This code review introduces the AbstractJsMap, which is a slightly modified API so that we can create faster map implementations.
The code contains new directories, so here is a read-only branch with the code in it: http://code.google.com/p/google-web-toolkit-incubator/source/browse/#svn/branches/ecc/collectionsReview Attached is the benchmark for putting then getting 1000 through 10,000 strings, where HashMap is compared to the new JsStringMap. For the compiled put/get benchmark, it is between 300%-500% faster. Thanks, Emily -- "There are only 10 types of people in the world: Those who understand binary, and those who don't" --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---
<<inline: Mozilla4_003.png>>
<?xml version="1.0" encoding="UTF-8"?> <gwt_benchmark_report date="Sep 4, 2008 3:18:13 PM" gwt_version="unknown"> <category description="" name=""> <benchmark class="com.google.gwt.gen2.collection.client.JsStringMapBenchmark" description="" name="testPuts"> <result agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)" host="127.0.0.1"> <trial timing="3.15625"> <variable name="type" value="JS"/> <variable name="size" value="1000"/> </trial> <trial timing="15.125"> <variable name="type" value="HASH"/> <variable name="size" value="1000"/> </trial> <trial timing="6.3125"> <variable name="type" value="JS"/> <variable name="size" value="2000"/> </trial> <trial timing="30.375"> <variable name="type" value="HASH"/> <variable name="size" value="2000"/> </trial> <trial timing="11.3125"> <variable name="type" value="JS"/> <variable name="size" value="3000"/> </trial> <trial timing="42.4375"> <variable name="type" value="HASH"/> <variable name="size" value="3000"/> </trial> <trial timing="14.625"> <variable name="type" value="JS"/> <variable name="size" value="4000"/> </trial> <trial timing="67.3125"> <variable name="type" value="HASH"/> <variable name="size" value="4000"/> </trial> <trial timing="18.5625"> <variable name="type" value="JS"/> <variable name="size" value="5000"/> </trial> <trial timing="78.8125"> <variable name="type" value="HASH"/> <variable name="size" value="5000"/> </trial> <trial timing="22.4375"> <variable name="type" value="JS"/> <variable name="size" value="6000"/> </trial> <trial timing="92.4375"> <variable name="type" value="HASH"/> <variable name="size" value="6000"/> </trial> <trial timing="23.5"> <variable name="type" value="JS"/> <variable name="size" value="7000"/> </trial> <trial timing="129.0"> <variable name="type" value="HASH"/> <variable name="size" value="7000"/> </trial> <trial timing="21.5"> <variable name="type" value="JS"/> <variable name="size" value="8000"/> </trial> <trial timing="125.0"> <variable name="type" value="HASH"/> <variable name="size" value="8000"/> </trial> <trial timing="33.375"> <variable name="type" value="JS"/> <variable name="size" value="9000"/> </trial> <trial timing="160.75"> <variable name="type" value="HASH"/> <variable name="size" value="9000"/> </trial> <trial timing="35.25"> <variable name="type" value="JS"/> <variable name="size" value="10000"/> </trial> <trial timing="156.75"> <variable name="type" value="HASH"/> <variable name="size" value="10000"/> </trial> </result> </benchmark> <benchmark class="com.google.gwt.gen2.collection.client.JsStringMapBenchmark" description="" name="testPutsAndGets"> <result agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)" host="127.0.0.1"> <trial timing="6.578125"> <variable name="type" value="JS"/> <variable name="size" value="1000"/> </trial> <trial timing="30.6875"> <variable name="type" value="HASH"/> <variable name="size" value="1000"/> </trial> <trial timing="14.125"> <variable name="type" value="JS"/> <variable name="size" value="2000"/> </trial> <trial timing="60.875"> <variable name="type" value="HASH"/> <variable name="size" value="2000"/> </trial> <trial timing="21.0625"> <variable name="type" value="JS"/> <variable name="size" value="3000"/> </trial> <trial timing="93.21875"> <variable name="type" value="HASH"/> <variable name="size" value="3000"/> </trial> <trial timing="28.5"> <variable name="type" value="JS"/> <variable name="size" value="4000"/> </trial> <trial timing="128.75"> <variable name="type" value="HASH"/> <variable name="size" value="4000"/> </trial> <trial timing="33.375"> <variable name="type" value="JS"/> <variable name="size" value="5000"/> </trial> <trial timing="141.3125"> <variable name="type" value="HASH"/> <variable name="size" value="5000"/> </trial> <trial timing="41.9375"> <variable name="type" value="JS"/> <variable name="size" value="6000"/> </trial> <trial timing="170.4375"> <variable name="type" value="HASH"/> <variable name="size" value="6000"/> </trial> <trial timing="47.0"> <variable name="type" value="JS"/> <variable name="size" value="7000"/> </trial> <trial timing="196.5"> <variable name="type" value="HASH"/> <variable name="size" value="7000"/> </trial> <trial timing="56.5"> <variable name="type" value="JS"/> <variable name="size" value="8000"/> </trial> <trial timing="244.5"> <variable name="type" value="HASH"/> <variable name="size" value="8000"/> </trial> <trial timing="74.625"> <variable name="type" value="JS"/> <variable name="size" value="9000"/> </trial> <trial timing="296.75"> <variable name="type" value="HASH"/> <variable name="size" value="9000"/> </trial> <trial timing="78.25"> <variable name="type" value="JS"/> <variable name="size" value="10000"/> </trial> <trial timing="312.75"> <variable name="type" value="HASH"/> <variable name="size" value="10000"/> </trial> </result> </benchmark> <benchmark class="com.google.gwt.gen2.collection.client.JsStringMapBenchmark" description="" name="testGets"> <result agent="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 1.1.4322; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)" host="127.0.0.1"> <trial timing="2.9375"> <variable name="type" value="JS"/> <variable name="size" value="1000"/> </trial> <trial timing="13.6875"> <variable name="type" value="HASH"/> <variable name="size" value="1000"/> </trial> <trial timing="7.75"> <variable name="type" value="JS"/> <variable name="size" value="2000"/> </trial> <trial timing="29.375"> <variable name="type" value="HASH"/> <variable name="size" value="2000"/> </trial> <trial timing="7.875"> <variable name="type" value="JS"/> <variable name="size" value="3000"/> </trial> <trial timing="27.25"> <variable name="type" value="HASH"/> <variable name="size" value="3000"/> </trial> <trial timing="15.875"> <variable name="type" value="JS"/> <variable name="size" value="4000"/> </trial> <trial timing="54.0"> <variable name="type" value="HASH"/> <variable name="size" value="4000"/> </trial> <trial timing="15.75"> <variable name="type" value="JS"/> <variable name="size" value="5000"/> </trial> <trial timing="78.0"> <variable name="type" value="HASH"/> <variable name="size" value="5000"/> </trial> <trial timing="13.625"> <variable name="type" value="JS"/> <variable name="size" value="6000"/> </trial> <trial timing="94.0"> <variable name="type" value="HASH"/> <variable name="size" value="6000"/> </trial> <trial timing="19.75"> <variable name="type" value="JS"/> <variable name="size" value="7000"/> </trial> <trial timing="110.0"> <variable name="type" value="HASH"/> <variable name="size" value="7000"/> </trial> <trial timing="27.25"> <variable name="type" value="JS"/> <variable name="size" value="8000"/> </trial> <trial timing="118.0"> <variable name="type" value="HASH"/> <variable name="size" value="8000"/> </trial> <trial timing="35.5"> <variable name="type" value="JS"/> <variable name="size" value="9000"/> </trial> <trial timing="109.0"> <variable name="type" value="HASH"/> <variable name="size" value="9000"/> </trial> <trial timing="39.5"> <variable name="type" value="JS"/> <variable name="size" value="10000"/> </trial> <trial timing="140.0"> <variable name="type" value="HASH"/> <variable name="size" value="10000"/> </trial> </result> </benchmark> </category> </gwt_benchmark_report>
