The paper presents an introductory optimization algorithm, which can be performed before a Java program is executed in a parallel system. Taking a sequential multithreaded version of a Java program as input information, the aim of the parallel program optimization is to determine an initial distribution of objects on virtual machines so as to decrease direct inter-object communication and balance loads of the virtual machines. The object placement optimization algorithm uses a graphical representation of control dependencies and data dependencies among methods in Java programs. These dependencies are discovered by an analysis of program byte code and stored in the form of relevant macro/dataflow graphs. The placement optimization algorithm tries to optimally assign the macro nodes to processors (JVMs) so as to reduce inter-processor communication overheads. The optimization method first does clustering of macro nodes on unlimited number of processors (logical JVMs) to reduce the execution time of the clustered nodes. Next, merging of the assigned clusters is performed to reduce the number of logical JVMs to the number of real processors. The presented approach is supported by a dynamic, on-line load balancing mechanism, which applies object migration as proposed in the ADAJ (Adaptive Distributed Applications in Java) project.
Citation:
Eryk Laskowski, Marek Tudruj, Richard Olejnik, Bernard Toursel, "Java Byte Code Scheduling Based on the Most-Often-Used-Paths in Programs with Branches," ispdc, pp.21-27, The 4th International Symposium on Parallel and Distributed Computing (ISPDC'05), 2005