Jack Shirazi reviews the Java performance trends and newsworthy items from 2007.Published January 2008, Author Jack Shirazi
Last month, I looked at what people were looking for from our sites in 2007 - this month, I look at the more general Java performance highlights of 2007. Looking through what has happened in the past year, I noticed five themes running through the year. They broadly break down into: Java 6; Capacity Management; JavaOne; Language Popularity; and finally and probably the most interesting, open source-ish support for high performance enterprise applications.
Java 6 was released at the end of 2006, so it's probably unsurprising that there was a significant 2007 story for Java 6. The big story for Java 6 performance is the maturity of the monitoring and troubleshooting support. At JavaPerformanceTuning.com we highlighted this support at the beginning of 2007 with a Java 6 special (newsletter 74) and our second newsletter (newsletter 75) that highlighted many of those very useful features - rather than recap here, I'll leave you to follow those links if you are interested in the details. The targeting of monitoring and troubleshooting support that was actually started in Java 5, was extended in Java 6. And now we're starting to see open source tools that are beginning to move into the more sophisticated Java performance tooling space that the commercial vendors have been providing for years. Notable are Glassbox (see our interview from April) and the Netbeans profiler, as leading open source tools that have added features that you only previously saw in commercial tools. Java 6 also saw further incremental performance improvements in the runtime compiler and the garbage collector that means it is usually slightly faster than Java 5 - always nice to get a speedup for free like that.
Also worth singling out as a 2007 story is the support of the now de facto standard heap dump format from the hprof library that is supplied with the Sun JVM (not specifically a Java 6 feature). This format is increasingly supported by profilers that can do memory analysis, and is supported by the Sun JVM as standard with the -XX:+HeapDumpOnOutOfMemoryError - a feature that I have found hugely useful for production systems to ensure that when you do crash with an OOME, you can diagnose the issue fairly quickly in many cases. I'll just mention the SAP memory analyser here too, which is a (soon to be open source) tool that reads the format and displays details - I've found that to be superior to JHat as the freebie-level tool to read these dumps.
Capacity management is not, of course, new, but 2007 saw an increased emphasis on capacity management from a large number of enterprises. Capacity management tools benefitted from this increased emphasis with a number of new entrants to the market, and with additional support for specific capabilities such as enterprise-wide transaction tracking and monitoring becoming an important feature of these tools. The focus on making the hardware work more efficiently than in the past means that virtualization got a boost in 2007 as something that was increasingly supplied as an option to enterprises and within enterprises. And finally, but most pertinent to the Java performance community, this same focus on efficiency means that enterprises are now starting to expect developers to put more effort than previously into performance analysis and tuning of applications, so that the applications make more efficient use of the hardware. One of my recommendations in the past was that buying more or faster hardware was usually one of the most cost effective tuning options - the increasing cost of enterprise data centres, and the more resource shared nature of modern applications means that this is no longer as true as it was previously. Now the cost benefit of a round of tuning on an application is often competitive to the total cost of ownership of upgrading the hardware.
JavaOne had a number of sessions on Java performance as usual, and these were of a good standard, but nothing particularly newsworthy that isn't already covered in the earlier "Java 6" section. The hype at JavaOne was directed around JavaFX, of which I noted that performance was considered as part of the design, so I expect that as soon as a decent JavaFX creation tool comes available, it will quickly be upgraded to produce well performing user interfaces. Of more interest to the performance community was the Consumer JRE announcements that shows Sun finally is taking a real interest in optimising the JRE download, startup and minimum runtime size. The combination of Consumer JRE and JavaFX clearly targets both the desktop, rapid development and rich internet application spaces. A swathe of commentary since JavaOne has shouted the "too little, too late" mantra, but the way I see it, this whole space is so backward and fragmented that given what is there now (RIA: Adobe Flex/AIR, Silverlight, AJAX, etc; desktop: VB, Delphi, C#, C, C++, Swing - and note that the single largest market share for developing desktop apps appears to be Swing, although that is swinging towards C#), personally I don't see it as too late at all.
But even including those bits of news, JavaOne, for me, was about those numbers which I still find impressive: Six million Java developers; Four million Java Blu-Ray devices; Seven million Java set-top boxes; Over two billion mobile handsets running Java worldwide; Over two and a half billion Java cards; Over 700 million PCs with Java installed; adding up to over five billion Java-powered devices worldwide.
Java maintained it's position as the undoubted number one computer language in 2007, with it's only close rival, the C/C++ combination, clearly in long term decline. The contrast is interesting from a Java performance perspective - we in the Java community know that Java has no significant performance disadvantage to C/C++ apart from in some niche areas, but that hasn't stopped every C/C++ advocate always shouting that C/C++ must be quicker and no darned evidence to the contrary was going to change their minds (I should note that C advocates complain about C++ being slower than C, but I'm lumping them all in together). However, the long term trend indicates that the overall I.T. community either see no significant speed difference, or don't care about any perceived difference.
In other languages, 2007 did see quite a lot of Ruby hype, but Ruby doesn't seem to be making the inroads that its supporters would dearly like it to be making. The only other long term trend identifiable at the moment is that C# is slowly (surprisingly slowly) but surely eventually going to take that second slot in the language rankings. But at the current rate, we are talking about a minimum of five years before it is at that level.
Finally, it seems that Java as a brand is making inroads into the popular consciousness, something that no other language has ever done - and with Sun changing their stock ticker from SUNW to JAVA, it's even possible that Sun will capitalise further and change the company name to "Sun Java" too. Of course the "Java" brand is different from the "Java" computer language, but the two are linked sufficiently that brand success will help maintain language dominance. It's certainly an interesting development in our industry.
Java went open source of course, but that's not particularly interesting from a Java performance point of view. What excited me about open source Java was the increasing number of frameworks targeted at high performance and highly scaled Java. We had Highly Scalable Java; Hadoop; several batching frameworks; Drools; GridGain and other grid frameworks; Parallel Processing Framework and others like that; multiple distributed caches; NIO based frameworks; Darkstar; Non-blocking hashmap; and several more. There was a definite focus on concurrency, with "volatile" being the most searched for term related to Java performance - Brian Goetz and Heinz Kabutz provided several particularly useful articles with strong guidelines on what to do and what to avoid in this area. I don't think any other language has this level of open source support for high performance and highly scaled applications.
In addition we had tooling as mentioned in the earlier "Java 6" section, and half a dozen (non-open source) alphaworks performance related tools from IBM, with some focusing specifically on concurrency (Real-Time Class Analysis, lock analyser, Dump Analyzer, ...). And on the general internet front, Google published details of how their web acceleration works, and Yahoo published a set of rules to follow to optimise the web browsing experience for users, focused on speeding downloads and display as much as possible. These successful businesses telling everyone how they make their sites fast is a gret boon to developers, great to see them give to the community in that way.
All in all, 2007 was certainly another interesting year for Java performance.