<?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>Base Six &#187; Java</title> <atom:link href="http://base6.com/category/tech/java/feed/" rel="self" type="application/rss+xml" /><link>http://base6.com</link> <description>James Furness&#039;s blog</description> <lastBuildDate>Wed, 08 Jun 2011 09:12:13 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <item><title>Tungsten FSM: A lightweight Java finite state machine library</title><link>http://base6.com/2010/12/05/tungsten-fsm-a-lightweight-java-finite-state-machine-library/</link> <comments>http://base6.com/2010/12/05/tungsten-fsm-a-lightweight-java-finite-state-machine-library/#comments</comments> <pubDate>Sun, 05 Dec 2010 18:36:00 +0000</pubDate> <dc:creator>James Furness</dc:creator> <category><![CDATA[Java]]></category> <category><![CDATA[finite state machine]]></category> <category><![CDATA[fsm]]></category> <category><![CDATA[tungsten]]></category> <guid
isPermaLink="false">http://base6.com/?p=136</guid> <description><![CDATA[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 [...]]]></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> ]]></content:encoded> <wfw:commentRss>http://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>http://base6.com/2010/09/16/a-team-london-insight-exchange/</link> <comments>http://base6.com/2010/09/16/a-team-london-insight-exchange/#comments</comments> <pubDate>Thu, 16 Sep 2010 13:59:43 +0000</pubDate> <dc:creator>James Furness</dc:creator> <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">http://base6.com/?p=120</guid> <description><![CDATA[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 [...]]]></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> ]]></content:encoded> <wfw:commentRss>http://base6.com/2010/09/16/a-team-london-insight-exchange/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Garbage Collection Tuning</title><link>http://base6.com/2010/08/23/garbage-collection-tuning/</link> <comments>http://base6.com/2010/08/23/garbage-collection-tuning/#comments</comments> <pubDate>Mon, 23 Aug 2010 12:59:42 +0000</pubDate> <dc:creator>James Furness</dc:creator> <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">http://base6.com/?p=118</guid> <description><![CDATA[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.]]></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> ]]></content:encoded> <wfw:commentRss>http://base6.com/2010/08/23/garbage-collection-tuning/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Performance techniques used in the Hotspot JVM</title><link>http://base6.com/2010/07/27/performance-techniques-used-in-the-hotspot-jvm/</link> <comments>http://base6.com/2010/07/27/performance-techniques-used-in-the-hotspot-jvm/#comments</comments> <pubDate>Tue, 27 Jul 2010 09:26:13 +0000</pubDate> <dc:creator>James Furness</dc:creator> <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">http://base6.com/?p=114</guid> <description><![CDATA[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.]]></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> ]]></content:encoded> <wfw:commentRss>http://base6.com/2010/07/27/performance-techniques-used-in-the-hotspot-jvm/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Calculating floating point epsilon/precision in Java</title><link>http://base6.com/2010/06/24/calculating-floating-point-epsilonprecision-in-java/</link> <comments>http://base6.com/2010/06/24/calculating-floating-point-epsilonprecision-in-java/#comments</comments> <pubDate>Thu, 24 Jun 2010 10:25:44 +0000</pubDate> <dc:creator>James Furness</dc:creator> <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">http://base6.com/?p=96</guid> <description><![CDATA[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 [...]]]></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
class="size-full wp-image-102" title="Normalized numbers when Base = 2, Precision = 3, Exponents = -1 to 2" src="http://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> ]]></content:encoded> <wfw:commentRss>http://base6.com/2010/06/24/calculating-floating-point-epsilonprecision-in-java/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>JMM Synopsis</title><link>http://base6.com/2009/09/15/jmm-synopsis/</link> <comments>http://base6.com/2009/09/15/jmm-synopsis/#comments</comments> <pubDate>Tue, 15 Sep 2009 10:32:49 +0000</pubDate> <dc:creator>James Furness</dc:creator> <category><![CDATA[Java]]></category> <category><![CDATA[Doug Lea]]></category> <category><![CDATA[JMM]]></category> <guid
isPermaLink="false">http://base6.com/?p=77</guid> <description><![CDATA[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;]]></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> ]]></content:encoded> <wfw:commentRss>http://base6.com/2009/09/15/jmm-synopsis/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Java Concurrency Refcard</title><link>http://base6.com/2009/07/08/java-concurrency-refcard/</link> <comments>http://base6.com/2009/07/08/java-concurrency-refcard/#comments</comments> <pubDate>Wed, 08 Jul 2009 06:40:33 +0000</pubDate> <dc:creator>James Furness</dc:creator> <category><![CDATA[Java]]></category> <category><![CDATA[alex miller]]></category> <category><![CDATA[DZone]]></category> <category><![CDATA[java concurrency]]></category> <guid
isPermaLink="false">http://base6.com/?p=68</guid> <description><![CDATA[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.]]></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> ]]></content:encoded> <wfw:commentRss>http://base6.com/2009/07/08/java-concurrency-refcard/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>NonBlockingHashMap</title><link>http://base6.com/2009/06/15/nonblockinghashmap/</link> <comments>http://base6.com/2009/06/15/nonblockinghashmap/#comments</comments> <pubDate>Mon, 15 Jun 2009 08:12:31 +0000</pubDate> <dc:creator>James Furness</dc:creator> <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">http://base6.com/?p=29</guid> <description><![CDATA[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.]]></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> ]]></content:encoded> <wfw:commentRss>http://base6.com/2009/06/15/nonblockinghashmap/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
