@TechReport{ it:2019-007, author = {Malin K{\"a}ll{\'e}n and Tobias Wrigstad}, title = {Performance of an {OO} Compute Kernel on the {JVM}: Revisiting {J}ava as a Language for Scientific Computing Applications ({E}xtended Version)}, institution = {Department of Information Technology, Uppsala University}, year = {2019}, number = {2019-007}, month = sep, abstract = {The study of Java as a programming language for scientific computing is warranted by simpler, more extensible and more easily maintainable code. Previous work on refactoring a C++ scientific computing code base to follow best practises of object-oriented software development revealed a coupling of such practises and considerable slowdowns due to indirections introduced by abstractions. In this paper, we explore how Java's JIT compiler handle such abstraction-induced indirection using a typical scientific computing compute kernel extracted from a linear solver written in C++. We find that the computation times for large workloads on one machine can be on-pair for C++ and Java. However, for distributed computations, a better parallelisation strategy needs to be found for non-blocking communication. We also report on the impact on performance for common ``gripes'': garbage collection, array bounds checking, and dynamic binding.} }