Reader Jim Falgout (hi, Jim!) ran into a recent paper called “Current State of Java for HPC”
About ten years after the Java Grande effort, this paper aims at providing a snapshot of the current status of Java for High Performance Computing. Multi-core chips are becoming mainstream, offering many ways for a Java Virtual Machine (JVM) to take advantage of such systems for critical tasks such as Just-In-Time compilation or Garbage Collection. We first perform some micro benchmarks for various JVMs, showing the overall good performance for basic arithmetic operations. Then we study a Java implementation of the Nas Parallel Benchmarks, using the ProActive middleware for distribution. Comparing this implementation with a Fortran/MPI one, we show that they have similar performance on computation intensive benchmarks, but still have scalability issues when performing intensive communications. Using experiments on clusters and multi-core machines, we show that the performance varies greatly, depending on the Java Virtual Machine used (version and vendor) and the kind of computation performed.
The authors know they are pushing a rock uphill when it comes to Java for performance
…The underlying benefit of Java frees the developer from the architectural heterogeneities of Grids. The drawbacks of Java are also well known, in particular its notorious low performance. However, little attention has been dedicated to the current state of Java, especially when considering new architectures, like multi-core machines, and new Java Virtual Machines.
But they still manage to show some interesting performance results, particularly for the computation-related portion of the calculation. Here is a performance graph from the paper comparing a variety of JVMs with a native MPI implementation on a GigE cluster for the CG benchmark; note that the Java performance is close to that of MPI (on this particular problem; there are counter examples in the paper).
From the conclusion
Overall, the results obtained are encouraging. We believe that the overhead of Java is now acceptable when performing computational intensive tasks. Regarding communication intensive tasks, the lower performance can be partially overcomed [sic] using optimized network layers. The HPC community has already worked on the issue and produced interesting results [NIE 05]. However, current JVM vendors have not developed efficient enough solutions yet.
More in the paper, which is worth a read.