The Java programming language has its origins in the development of portable internet applications, that are interpreted on the client machine. However, a number of software projects have adopted it as the language of choice for a wide variety of applications, including numerically intensive scientific computing. Given its heritage, the suitability of Java for such application domains remains questionable, which is reflected in large number of users reporting poor performance compared to native compilers for C or Fortran. At heart, Java is an object-oriented language enabling the rapid development of modular and maintainable programs. It provides an integral security model and features array bounds checking, arbitrarily shaped arrays, a deterministic floating-point arithmetic on all platforms, automatic memory management using garbage collection, multi-threaded execution and a portable byte code representation. These features ease the development of scientific applications but may hinder efficient execution of the applications. This article shows state of the art compilation techniques addressing these language features to achieve optimal performance. Efficient solutions for a large number of performance problems encountered in the past are available in the current generation of Java compilers. We may thus conclude that a maturing Java is suited for large scale scientific applications.
['Andreas Krall', 'Philipp Tomsich']
Java for Large-Scale Scientific Computations?