twofishy writes: Something I've noticed amongst financial service companies in London is a growing use of Java in preference to c/c++ for exchange systems, High Frequency Trading and over low-latency work. InfoQ has a good written panel discussion with Peter Lawrey, Martin Thompson, Todd L. Montgomery and Andy Piper.
From the article:
Often the faster an algorithm can be put into the market, the more advantage it has. Many algorithms have a shelf life and quicker time to market is key in taking advantage of that. With the community around Java and the options available, it can definitely be a competitive advantage, as opposed to C or C++ where the options may not be as broad for the use case. Sometimes, though, pure low latency can rule out other concerns. I think currently, the difference in performance between Java and C++ is so close that it's not a black and white decision based solely on speed. Improvements in GC techniques, JIT optimizations, and managed runtimes have made traditional Java weaknesses with respect to performance into some very compelling strengths that are not easy to ignore.
twofishy writes: Monica Beckwith, the performance lead for Garbage First Garbage Collector, describes the collector in detail.
Many articles describe how a poorly tuned garbage collector can bring an application's SLA commitments to its knees. Oracle's new G1 Collector in HotSpot moves away from the conventional GC model, where a Java heap splits into (contiguous) young and old generations, and instead introduces the concept of “regions”, for a generally more performant and manageable GC.
From the article:
G1 GC is an incremental parallel compacting GC that provides more predictable pause times compared to CMS GC and Parallel Old GC. By introducing a parallel, concurrent and multi-phased marking cycle, G1 GC can work with much larger heaps while providing reasonable worst-case pause times. The basic idea with G1 GC is to set your heap ranges (using -Xms for min heap size and -Xmx for the max size) and a realistic (soft real time) pause time goal (using -XX:MaxGCPauseMillis) and then let the GC do its job.
With the introduction of G1 GC, HotSpot moves away from its conventional GC layout where a contiguous Java heap splits into (contiguous) young and old generations. In G1 GC, HotSpot introduces the concept of “regions”. A single large contiguous Java heap space divides into multiple fixed-sized heap regions. A list of “free” regions maintains these regions. As the need arises, the free regions are assigned to either the young or the old generation. These regions can span from 1MB to 32MB in size depending on your total Java heap size. The goal is to have around 2048 regions for the total heap. Once a region frees up, it goes back to the "free" regions list. The principle of G1 GC is to reclaim the Java heap as much as possible (while trying its best to meet the pause time goal) by collecting the regions with the least amount of live data i.e. the ones with most garbage, first; hence the name Garbage First.
twofishy writes: The internet has been buzzing this week with the news that Oracle has ceased to provide free time zone updates outside of the standard JDK release cycle. However, at the end of yesterday the firm appeared to have a change of heart.
We never intended for a support contract to be required to keep JDK 7 up to date. TZUpdater was made unavailable on March 8 as part of the End of Public Updates for JDK 6, and as soon as we learned that this affected JDK 7 users we initiated the process of making it available for JDK 7 again.
twofishy writes: Oracle's Brian Goetz, JSR-335 spec lead, talks to InfoQ about his observations of Project Lambda, the effort to add Lambda functions to Java.
"...unlike with some earlier platform evolution efforts, where we had to implement everything via syntactic sugar in the compiler, JSR-335 was able to undertake a coordinated co-evolution of the language, libraries, and Virtual Machine (VM), yielding a much better overall result."
twofishy writes: "To avoid the confusion caused by renumbering releases", Oracle has announced that it is adopting a new numbering scheme for JDK 5.0, JDK 6 and JDK 7. "The next Limited Update for JDK 7 will be numbered 7u40, and the next 3 CPUs after that will be numbered 7u45, 7u51, and 7u55.” The vendor notes that a more elegant solution would require the changing of the version numbering scheme to accommodate different kinds of changes (for example by using 7u44-2 ). However this cannot be implemented outside of a major release, since doing so might break existing code that parses version strings (possibly including the Java auto-update system)
twofishy writes: Developers at the LMAX Exchange, an execution venue for trading FX established in the City of London in October 2010, have begun testing Azul's Zing JVM as a way of improving their already impressive response times and throughput rates.
Accoridng to the article the firm uses Dell 520 and 720 with dual socket, 8 core, Intel Sandy Bridge CPUs. The Dells have 64 and 128 GB of memory respectively with CentOS 6 as the OS. They handle an average load of 1,000-2,000 orders per second with peaks of over 5,000. On rare occasions it has gone to over 20,000 orders/second. They currently gets order latency at 1.5ms on average, whilst the trade latency is less than 3ms end to end, including real time pre-trade risk control. With Zing they see around a 10-20% improvement in the mean latency, increasing to around a 50% improvement at the 99th percentile.
The improvement is down to eliminating stop-the-world GC pauses. Based on the Azul C4 (Continuously Concurrent Compacting Collector) garbage collection algorithm the Zing collector improves application performance and removes barriers to Java scalability by eliminating pause times even at very large heap sizes. Using a combination of software techniques and hardware emulation features, the Azul garbage collector uses ‘concurrent compaction’ to allow applications to continue processing while remapping memory.
Another article describes the algorithim in a bit more detail. C4 uses a Loaded Value Barrier (LVB) to verify each heap reference as correct when loaded. Any heap references that point to relocated objects are caught and fixed in this self-healing barrier. C4 has a guaranteed single pass concurrent marker. The C4 collector also performs concurrent reference processing (including weak, soft and final references) and relocation and remapping are both concurrent. It also uses ‘quick release’ to make freed memory available quickly to the application and for the relocation of objects. This enables ‘hand over hand’ compaction that does not require empty memory to function.
twofishy writes: Struts 1, the venerable Java MVC Web framework, has reached End Of Life status, the Apache foundation has announced. In a sense, the move simply formalises what has already happened, as the Struts team have focused their efforts on version 2; the last release of Struts 1 was version 1.3.10 in December 2008. The change of status does mean however that, whilst the code and documentation will still be available, no further security patches or bug fixes will be issued.
twofishy writes: Turing award winner Barbara Liskov is Professor of Engineering in the MIT School of Engineering's Electrical Engineering and Computer Science department and an Institute Professor at the Massachusetts Institute of Technology. She is best known for the Liskov Substitution Principle which is named for her (though not coined by her).
She gave a keynote at QCon London, and afterwards gave an interview in which she discusses language design, modularity and distributed computation.
On the Liskov Substitution Principle
"So it’s a very simple rule, it’s really very intuitive and what it means is that if you have a type that is a subtype of another type and you use an object of that subtype in a context where you expect an object of the supertype, then the object of the subtype ought to behave like you expect. In other words you’re depending upon the specification of the supertype and the object should meet that specification even though it might belong to a subtype."
twofishy writes: After an undeniably rocky start, which saw high profile resignations from the JCP, including Doug Lea (who remains active in the OpenJDK), and the Apache Software Foundation, Oracle is making significant efforts to re-engage with the wider Java ecosystem, a theme which it talked up at the most recent JavaOne conference. The company is working hard to engage with the Java User Group leaders and Java Champions, membership of the OpenJDK project is growing, and the company is making efforts to reform the Java Community Process to improve transparency. The firm has also published a clear, well-defined Java roadmap toward Java 8 and Java 9. Problems still exist however.
twofishy writes: "Yammer is moving from Scala to Java, after finding in a year-long experiment that the benefits provided by writing in a terser language don't outweigh the benefits of the complexities in having to train new employees and debugging performance problems. The email also suggests a number of performance improvements that can be made by avoiding certain patterns."
twofishy writes: Azul Systems have released Zing 5.0, eliminating their previous requirement for a hypervisor, and therefore bringing their pauseless garbage collector, C4, to unmodified 64-bit Linux for the first time.
The C4 algorithm was first deployed on Azul’s Vega systems, and has evolved and matured since it was first commercially introduced in 2005. It is now available on both Vega and x86-64 architectures. On Vega’s custom processors, GPGC made use of a special loaded value barrier (LVB) instruction to perform the barrier checks. Recent improvements in Intel and AMD processors have allowed Azul to bring the same capabilities to Intel and AMD based servers. While a single-cycle LVB instruction does not currently exist on x86-64 architectures, Azul uses its JIT compiler to generate a semantically equivalent set of x86 instructions and efficiently interleave it with the normal instruction stream. Specifically for Intel, Azul exploits the EPT (Extended Page Table) feature (which first appeared in Intel's Xeon 55xx, and later in Xeon 56xx, 65xx and 75xx chips), and for AMD the NPT (otherwise know as AMD-V Nested Paging) feature. This works in conjunction with the x86 virtual memory subsystem to remap and protect GC-compacted pages and thereby achieve the same loaded value barrier effect, and maintain the same algorithmic invariants needed for the Pauseless GC algorithms to work. The loaded value barrier set of instructions is emitted by the JIT compilers and efficiently interleaved into the regular instruction stream.
To simulate the “fast traps” on x86 Azul inject a sequence of x86 instructions that perform a semantically equivalent set of tests and a conditional call at the loaded value barrier site, all using a single conditional branch in the hot case. Tene described this as analogous to an "LVB" instruction using x86 instructions as "micro-code".
twofishy writes: The Who guitarist Pete Townshend attacked Apple's iTunes for bleeding artists 'like a digital vampire' during a speech in honour of the late BBC DJ John Peel. The rocker called on Apple to do more to help the artists they are profiting from at the inaugural event in memory of the radio legend in Salford yesterday.
Amongst his suggestions:
"Employ 20 A&R people from the dying record business. Have them respond to tracks sent in from new artists. If they feel the artists are bad, or aren't ready, say so. But have them tell the truth, kindly and constructively. Guide them to other helpful resources, don't just send them to the wolves of Blogland where it seems to me a lot of the vilest bile comes from people who could be drunk, or just nuts. A fledging musician at the start of a career is a delicate thing – even a rapper. (You'll just have to take my word for that.) (Apple do already have back-room people assessing what's hot, but they don't have this kind of power. I'll bet they'd love it. 20 John Peels inside Apple – imagine it)."
He also tackles areas such as Financial support, Creative Nurturing, Manufacturing, Publishing, Marketing, Distribution and Payment.
twofishy writes: Following the final approval vote for Java EE 6 last week Sun has today Java EE 6 SDK, GlassFish version 3, and Netbeans 6.8. Java EE 6 itself is a significant update, introducing a number of new APIs including support for RESTful web services though JAX-RS, and a new dependency injection standard and API, and standard data validation library that works across the different application tiers. APIs have also seen important updates with Servlets gaining asynchronous support, JSF 2.0 getting a new templating language based on Facelets and many other enhancements, and JPA getting a new criteria DSL conceptually similar to.NET's LINQ. Sun has also introduced the concept of Profiles, first used in JavaME, to provide a lower cost entry point for new vendors wanting to implement a subset of the full Java EE spec. The first JavaEE profile is aimed at Web Development. EE 6 Spec Lead Roberto Chinnici describes this as an initiative that will bring significant benefits to developers but others are not so sure. Jürgen Höller, co-founder of the Spring framework, for example states "Implementing this profile is not very attractive. I am yet to see a vendor who is aiming to implement this profile but not the full profile."
twofishy writes: The release of Java Card version 3 is imminent. The new version includes a new Connected Edition representing the first major update to the Smart Card platform architecture for 10 years. It includes support for an embedded servlet container and a JDK6 compatible virtual machine. From the article
"The new architecture is designed to allow a smart card to act as a secure network node, either providing security services to a network or requesting access to network resources. Developers can integrate smart cards within IP networks and web services either through an embedded Servlet 2.5 compatible web container or by managing the connections directly"