<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java - Base Six</title>
	<atom:link href="https://base6.com/category/tech/java/feed/" rel="self" type="application/rss+xml" />
	<link>https://base6.com/</link>
	<description>James Furness&#039;s blog</description>
	<lastBuildDate>Sun, 05 Dec 2010 18:49:08 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.3.1</generator>
	<item>
		<title>Tungsten FSM: A lightweight Java finite state machine library</title>
		<link>https://base6.com/2010/12/05/tungsten-fsm-a-lightweight-java-finite-state-machine-library/</link>
					<comments>https://base6.com/2010/12/05/tungsten-fsm-a-lightweight-java-finite-state-machine-library/#comments</comments>
		
		<dc:creator><![CDATA[James Furness]]></dc:creator>
		<pubDate>Sun, 05 Dec 2010 18:36:00 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[finite state machine]]></category>
		<category><![CDATA[fsm]]></category>
		<category><![CDATA[tungsten]]></category>
		<guid isPermaLink="false">https://base6.com/?p=136</guid>

					<description><![CDATA[<p>I recently came across Tungsten FSM whilst looking for an off the shelf FSM implementation. Ideally I was looking for something which was a lightweight and no-frills but robust FSM implementation, and Tungsten FSM seemed to exactly fit the bill. All configuration is done in code, so no messing around with XML files, and the [&#8230;]</p>
<p>The post <a href="https://base6.com/2010/12/05/tungsten-fsm-a-lightweight-java-finite-state-machine-library/">Tungsten FSM: A lightweight Java finite state machine library</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>I recently came across <a href="http://sourceforge.net/apps/mediawiki/tungsten/index.php?title=Introduction_to_Tungsten_Finite_State_Machine_Library">Tungsten FSM</a> whilst looking for an off the shelf FSM implementation. Ideally I was looking for something which was a lightweight and no-frills but robust FSM implementation, and Tungsten FSM seemed to exactly fit the bill. All configuration is done in code, so no messing around with XML files, and the implementation itself is only a handful of classes with only one dependency (log4j).</p>
<p>All in all worked out very well, and it seems to do exactly what it promises. The support for sub-states is useful to cut down on config bloat by defining common transitions on a parent state.</p>
<p>If I were to nitpick it would have been nice to see generics used to avoid needing to cast the entities/events, however this would arguably bloat the Tungsten source somewhat. It would have also been nice to be able to specify an &#8220;ignore&#8221; type transition which could be specified on a parent state to ignore an event rather than having to define transitions on all sub states of the parent state for an event in order to ignore it and stay in the same state.</p><p>The post <a href="https://base6.com/2010/12/05/tungsten-fsm-a-lightweight-java-finite-state-machine-library/">Tungsten FSM: A lightweight Java finite state machine library</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://base6.com/2010/12/05/tungsten-fsm-a-lightweight-java-finite-state-machine-library/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>A-Team London Insight Exchange</title>
		<link>https://base6.com/2010/09/16/a-team-london-insight-exchange/</link>
		
		<dc:creator><![CDATA[James Furness]]></dc:creator>
		<pubDate>Thu, 16 Sep 2010 13:59:43 +0000</pubDate>
				<category><![CDATA[Finance]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[A-Team]]></category>
		<category><![CDATA[CEP]]></category>
		<category><![CDATA[FIX]]></category>
		<category><![CDATA[HFT]]></category>
		<category><![CDATA[low latency]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[state of the art]]></category>
		<category><![CDATA[Sun]]></category>
		<guid isPermaLink="false">https://base6.com/?p=120</guid>

					<description><![CDATA[<p>Myself and a colleague were offered some tickets for the A-Team Insight Exchange (High Performance Technologies for Trading and Risk) in London yesterday, and were able to get away from our desk long enough to attend the first half of the day! Overall a lot of the things discussed were things that we were already [&#8230;]</p>
<p>The post <a href="https://base6.com/2010/09/16/a-team-london-insight-exchange/">A-Team London Insight Exchange</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Myself and a colleague were offered some tickets for the <a href="http://www.a-teamgroup.com/insightexchange/lon-sep/">A-Team Insight Exchange</a> (High Performance Technologies for Trading and Risk) in London yesterday, and were able to get away from our desk long enough to attend the first half of the day!</p>
<p>Overall a lot of the things discussed were things that we were already aware of as a team, and although it was disappointing not to have any huge takeaways from the day it was heartening to know that our team is at pace with the current state of the art (although clearly the state of the art as presented predominately by vendors at such a conference does not necessarily equal the true state of the art in in-house technologies developed by banks/funds).</p>
<p>A few interesting themes from the day:</p>
<ul>
<li><strong>Integration/Standards</strong> – A lot of interest in making proprietary components e.g. for risk/algorithmic execution use industry standards (e.g. <a href="http://en.wikipedia.org/wiki/FIXatdl">FIXatdl</a> for algo trading) to speed up integration and facilitate reuse of off the shelf components.</li>
<p></p>
<li><strong>Build vs buy</strong> – Many of the panel discussions focused around this with the vendors obviously arguing the buy case for time to market, less developers required etc.</li>
<p></p>
<li><strong>Interest in low-latency/HFT increasingly spreading to FX/options</strong> – According to the vendors, a lot of the technologies previously used almost exclusively by equities such as <a href="http://en.wikipedia.org/wiki/InfiniBand">InfiniBand</a>/<a href="http://en.wikipedia.org/wiki/10_Gigabit_Ethernet">10 GigE</a> and colocation are now being taken up by increasing numbers of customers for FX/options.</li>
<p></p>
<li><strong>The need for education</strong> – One of the panel members made an interesting point that a lot of customers have infrastructure teams who have no idea what the High Frequency Trading teams in their bank are doing, this can be counter-productive as the HFT teams build/support everything themselves as they don’t feel they can trust the infrastructure teams to understand/implement their requirements correctly. If infrastructure teams were better educated about HFT/low-latency this would be less of an issue.</li>
<p></p>
<li><strong>Different types of latency</strong> – Darshan Chandarana from Oracle address touched on realtime JVMs a bit and re-iterated the fact that it is generally not possible to have both the lowest latency and maximum determinism – realtime technologies generally decrease variance at the expense of increasing  the mean. The only counterexample given to this was <a href="http://en.wikipedia.org/wiki/InfiniBand">InfiniBand</a>, which apparently is indeed a magic bullet!</li>
<p>
</ul>
<p>A few interesting vendors:</p>
<ul>
<li><a href="http://www.panopticon.com/"><strong>Panopticon</strong></a> – Partners of Sybase’s CEP offering (<a href="http://www.sybase.co.uk/products/financialservicessolutions/aleristreamingplatform">Aleri</a>), they demoed alongside Sybase. Some interesting visualisations on top of the risk system (e.g. their <a href="http://www.panopticon.com/data_visualizations/treemap_tree_mapping_information_visualisation_software.htm">treemap</a>).</li>
<p></p>
<li><a href="http://www.sumerian.com/"><strong>Sumerian</strong></a> – Came up with a nice sound byte in one of the panel discussions: “Latency is a distribution, not a number”. This piqued my interest as this was a view that our team hold which some of the other latency monitoring vendors we have previously met didn’t implement. Also, unlike some of the other vendors we have previously met, Sumerian&#8217;s approach is not a real-time dashboard &#8211; instead data is shipped to them and they analyse it to produce a one-off report which identifies which areas of the system are most latent and therefore benefit from development investment. Obviously there are pros and cons to this approach vs a real-time monitoring dashboard.</li>
<p></p>
<li><a href="http://www.oracle.com/"><strong>Oracle</strong></a> &#8211; Thanks to the merger with Sun, they are now producing hybrid appliances using Sun hardware, e.g. they believe they have built one of the fastest database servers available (and they had brought this in an impressive <a href="http://blogs.oracle.com/oracleopenworld/exadata09.jpg">display rack</a> to their stand). Will be interesting to see if they come up with any challenges to <a href="http://www.azulsystems.com/">Azul</a> in the JVM appliance space.</li>
<p>
</ul><p>The post <a href="https://base6.com/2010/09/16/a-team-london-insight-exchange/">A-Team London Insight Exchange</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Garbage Collection Tuning</title>
		<link>https://base6.com/2010/08/23/garbage-collection-tuning/</link>
		
		<dc:creator><![CDATA[James Furness]]></dc:creator>
		<pubDate>Mon, 23 Aug 2010 12:59:42 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[cms]]></category>
		<category><![CDATA[garbage collection]]></category>
		<category><![CDATA[Hotspot]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[ParNew]]></category>
		<guid isPermaLink="false">https://base6.com/?p=118</guid>

					<description><![CDATA[<p>I recently stumbled across a useful presentation: &#8220;GC Tuning In the HotSpot JVM&#8221; from FISL 10, which provides a good overview of how to tune the ParNew, Paralell and CMS collectors&#8230; Also quite useful is this blog entry which explains how to understand CMS GC logs.</p>
<p>The post <a href="https://base6.com/2010/08/23/garbage-collection-tuning/">Garbage Collection Tuning</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>I recently stumbled across a useful presentation: &#8220;<a href="http://mediacast.sun.com/users/Ludovic/media/GCTuningPresentationFISL10.pdf/details">GC Tuning In the HotSpot JVM</a>&#8221; from FISL 10, which provides a good overview of how to tune the ParNew, Paralell and CMS collectors&#8230;</p>
<p>Also quite useful is this <a href="http://blogs.sun.com/poonam/entry/understanding_cms_gc_logs">blog entry</a> which explains how to understand CMS GC logs.</p><p>The post <a href="https://base6.com/2010/08/23/garbage-collection-tuning/">Garbage Collection Tuning</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Performance techniques used in the Hotspot JVM</title>
		<link>https://base6.com/2010/07/27/performance-techniques-used-in-the-hotspot-jvm/</link>
		
		<dc:creator><![CDATA[James Furness]]></dc:creator>
		<pubDate>Tue, 27 Jul 2010 09:26:13 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Hotspot]]></category>
		<category><![CDATA[instanceof]]></category>
		<category><![CDATA[isAssignableFrom]]></category>
		<category><![CDATA[JVM]]></category>
		<category><![CDATA[Performance]]></category>
		<guid isPermaLink="false">https://base6.com/?p=114</guid>

					<description><![CDATA[<p>Little gem from the Hotspot Internals wiki helping to solve puzzles such as is &#8220;X.class.isAssignableFrom(obj)&#8221; slower than &#8220;obj instanceof X&#8220;! Performance techniques used in the Hotspot JVM.</p>
<p>The post <a href="https://base6.com/2010/07/27/performance-techniques-used-in-the-hotspot-jvm/">Performance techniques used in the Hotspot JVM</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Little gem from the Hotspot Internals wiki helping to solve puzzles such as is &#8220;<code>X.class.isAssignableFrom(obj)</code>&#8221; slower than &#8220;<code>obj instanceof X</code>&#8220;! </p>
<p><a href="http://wikis.sun.com/display/HotSpotInternals/PerformanceTechniques">Performance techniques used in the Hotspot JVM</a>.</p><p>The post <a href="https://base6.com/2010/07/27/performance-techniques-used-in-the-hotspot-jvm/">Performance techniques used in the Hotspot JVM</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Calculating floating point epsilon/precision in Java</title>
		<link>https://base6.com/2010/06/24/calculating-floating-point-epsilonprecision-in-java/</link>
		
		<dc:creator><![CDATA[James Furness]]></dc:creator>
		<pubDate>Thu, 24 Jun 2010 10:25:44 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[approximation]]></category>
		<category><![CDATA[epsilon]]></category>
		<category><![CDATA[floating point arithmetic]]></category>
		<category><![CDATA[machine representation]]></category>
		<guid isPermaLink="false">https://base6.com/?p=96</guid>

					<description><![CDATA[<p>Floating point arithmetic/rounding can be somewhat painful, made worse by the fact that the epsilon (error) in the machine representation of floating point varies depending on the exponent (i.e. how large/small the number being represented is): Normalized numbers when Base = 2, Precision = 3, Exponents = -1 to 2 [Goldberg91] A very comprehensive paper [&#8230;]</p>
<p>The post <a href="https://base6.com/2010/06/24/calculating-floating-point-epsilonprecision-in-java/">Calculating floating point epsilon/precision in Java</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Floating point arithmetic/rounding can be somewhat painful, made worse by the fact that the epsilon (error) in the machine representation of floating point varies depending on the exponent (i.e. how large/small the number being represented is):</p>
<div id="attachment_102" class="wp-caption aligncenter" style="width: 545px"><img decoding="async" class="size-full wp-image-102" title="Normalized numbers when Base = 2, Precision = 3, Exponents = -1 to 2" src="https://base6.com/files/2010/06/ncg_goldberg251.gif" alt="" width="535" height="62" /></p>
<p class="wp-caption-text">Normalized numbers when Base = 2, Precision = 3, Exponents = -1 to 2 [<a href="http://docs.sun.com/source/806-3568/ncg_goldberg.html">Goldberg91</a>]</p>
</div>
<p>A very comprehensive paper (from which the above image is taken) is available <a href="http://docs.sun.com/source/806-3568/ncg_goldberg.html">here</a>. In previous teams we have implemented our own functions to derive an approximation of the epsilon from the number to be represented, however I discovered recently to my surprise that such a function was added to Java in 1.5: <a href="http://java.sun.com/javase/6/docs/api/java/lang/Math.html#ulp%28double%29">Math.ulp</a>!</p><p>The post <a href="https://base6.com/2010/06/24/calculating-floating-point-epsilonprecision-in-java/">Calculating floating point epsilon/precision in Java</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>JMM Synopsis</title>
		<link>https://base6.com/2009/09/15/jmm-synopsis/</link>
		
		<dc:creator><![CDATA[James Furness]]></dc:creator>
		<pubDate>Tue, 15 Sep 2009 10:32:49 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Doug Lea]]></category>
		<category><![CDATA[JMM]]></category>
		<guid isPermaLink="false">https://base6.com/?p=77</guid>

					<description><![CDATA[<p>Useful synopsis of the Java Memory Model from Doug Lea &#8211; in particular the clearest explanation I have found so far of the meaning of &#8220;happens-before&#8221;, and some useful definitions which helped to get a concrete idea of the semantics around safe-publication of variables through Thread.start()&#8230;</p>
<p>The post <a href="https://base6.com/2009/09/15/jmm-synopsis/">JMM Synopsis</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><a href="http://gee.cs.oswego.edu/dl/cpj/JMMsynopsis.html">Useful synopsis</a> of the Java Memory Model from <a href="http://gee.cs.oswego.edu/dl/">Doug Lea</a> &#8211; in particular the clearest explanation I have found so far of the meaning of &#8220;happens-before&#8221;, and some useful definitions which helped to get a concrete idea of the semantics around safe-publication of variables through Thread.start()&#8230;</p><p>The post <a href="https://base6.com/2009/09/15/jmm-synopsis/">JMM Synopsis</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Java Concurrency Refcard</title>
		<link>https://base6.com/2009/07/08/java-concurrency-refcard/</link>
		
		<dc:creator><![CDATA[James Furness]]></dc:creator>
		<pubDate>Wed, 08 Jul 2009 06:40:33 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[alex miller]]></category>
		<category><![CDATA[DZone]]></category>
		<category><![CDATA[java concurrency]]></category>
		<guid isPermaLink="false">https://base6.com/?p=68</guid>

					<description><![CDATA[<p>A handy concurrency refcard from Alex Miller is now available on DZone. Most of this should be second nature for experienced Java developers, but it provides a handy summary of concurrency and reminders of some of the less frequently used (and hence more easily forgotten) classes like ConcurrentSkipListSet, Atomic*Array etc.</p>
<p>The post <a href="https://base6.com/2009/07/08/java-concurrency-refcard/">Java Concurrency Refcard</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>A handy <a href="http://tech.puredanger.com/2009/07/06/java-concurrency-refcard/">concurrency refcard</a> from Alex Miller is now available on <a href="http://refcardz.dzone.com/refcardz/core-java-concurrency">DZone</a>. Most of this should be second nature for experienced Java developers, but it provides a handy summary of concurrency and reminders of some of the less frequently used (and hence more easily forgotten) classes like <code>ConcurrentSkipListSet</code>, <code>Atomic*Array</code> etc.</p><p>The post <a href="https://base6.com/2009/07/08/java-concurrency-refcard/">Java Concurrency Refcard</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>NonBlockingHashMap</title>
		<link>https://base6.com/2009/06/15/nonblockinghashmap/</link>
		
		<dc:creator><![CDATA[James Furness]]></dc:creator>
		<pubDate>Mon, 15 Jun 2009 08:12:31 +0000</pubDate>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Azul]]></category>
		<category><![CDATA[ConcurrentHashMap]]></category>
		<category><![CDATA[lib-high-scale]]></category>
		<category><![CDATA[non-blocking]]></category>
		<category><![CDATA[NonBlockingHashMap]]></category>
		<guid isPermaLink="false">https://base6.com/?p=29</guid>

					<description><![CDATA[<p>Just came across this, looks like it has been around on Sourceforge for a while as part of lib-high-scale. Designed for large numbers of CPUs (e.g. Azul hardware), but microbenchmarks claim a small improvement over ConcurrentHashMap even on 2 CPUs.</p>
<p>The post <a href="https://base6.com/2009/06/15/nonblockinghashmap/">NonBlockingHashMap</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Just came across this, looks like it has been around on Sourceforge for a while as part of <a href="http://high-scale-lib.sourceforge.net/">lib-high-scale</a>. Designed for large numbers of CPUs (e.g. <a href="http://www.azulsystems.com/">Azul</a> hardware), but <a href="http://www.azulsystems.com/events/javaone_2007/2007_LockFreeHash.pdf">microbenchmarks</a> claim a small improvement over <a href="http://java.sun.com/javase/6/docs/api/java/util/concurrent/ConcurrentHashMap.html">ConcurrentHashMap</a> even on 2 CPUs.</p><p>The post <a href="https://base6.com/2009/06/15/nonblockinghashmap/">NonBlockingHashMap</a> first appeared on <a href="https://base6.com/">Base Six</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
