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>

Reply via email to