Safe and Efficient Hardware Specialization of Java Applications

Providing Java applications with access to low-level system resources, including fast network and I/O interfaces, requires functionality not provided by the Java Virtual Machine instruction set. Currently, Java applications obtain this functionality by executing code written in a lower-level language, such as C, through a native method interface. However, the overhead of this interface can be very high, and executing arbitrary native code raises serious protection and portability concerns. Jaguar [37] provides Java applications with efficient access to hardware resources through a bytecode specialization technique which transforms Java bytecode sequences to make use of inlined Jaguar bytecode which implements low-level functionality. Jaguar bytecode is portable and type-exact, making it both safer and more efficient than native methods. Jaguar requires that the target JVM or compiler recognizes Jaguar bytecode, which is a superset of the Java bytecode instruction set. We describe two implementations of Jaguar: one based on a static Java compiler, and the other which uses a standard JVM coupled with a Jaguar-enabled just-intime compiler. The JIT compiler applies code patches to the original Java bytecode, stored in the form of annotations in the Java class file. We demonstrate that Jaguar-specialized Java applications perform as well as C for a set of communication benchmarks, and that the code patching technique involves minimal compile-time

[1]  Ole Agesen GC Points in a Threaded Environment , 1998 .

[2]  David E. Culler,et al.  Virtual network transport protocols for Myrinet , 1998, IEEE Micro.

[3]  Dan Bonachea Bulk file I/O extensions to Java , 2000, JAVA '00.

[4]  David E. Culler,et al.  Jaguar: enabling efficient communication and I/O in Java , 2000, Concurr. Pract. Exp..

[5]  Vladimir Getov,et al.  High-Performance Parallel Programming in Java: Exploiting Native Libraries , 1998, Concurr. Pract. Exp..

[6]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[7]  Samuel P. Midkiff,et al.  Efficient support for complex numbers in Java , 1999, JAVA '99.

[8]  David E. Culler,et al.  An Implementation and Analysis of the Virtual Interface Architecture , 1998, Proceedings of the IEEE/ACM SC98 Conference.

[9]  Per Bothner A gcc-based Java implementation , 1997, Proceedings IEEE COMPCON 97. Digest of Papers.

[10]  Katherine A. Yelick,et al.  Titanium: A High-performance Java Dialect , 1998, Concurr. Pract. Exp..

[11]  Thorsten von Eicken,et al.  Interfacing Java to the virtual interface architecture , 1999, JAVA '99.

[12]  Satoshi Matsuoka,et al.  OpenJIT—A Reflective Java JIT Compiler , 2000 .

[13]  Erik Ruf,et al.  Marmot: an optimizing compiler for Java , 2000, Softw. Pract. Exp..

[14]  Greg J. Regnier,et al.  The Virtual Interface Architecture , 2002, IEEE Micro.

[15]  Willy Zwaenepoel,et al.  Flash: An efficient and portable Web server , 1999, USENIX Annual Technical Conference, General Track.

[16]  Michael Philippsen,et al.  JavaParty - Transparent Remote Objects in Java , 1997, Concurr. Pract. Exp..

[17]  Thorsten von Eicken,et al.  U-Net: a user-level network interface for parallel and distributed computing , 1995, SOSP.

[18]  Michael Philippsen,et al.  A more efficient RMI for Java , 1999, JAVA '99.

[19]  W. Vogels,et al.  A User-Level Network Interface for Parallel and Distributed Computing , 1995 .

[20]  Rolf Hempel,et al.  The MPI Message Passing Interface Standard , 1994 .

[21]  Toshiaki Yasue,et al.  Design, implementation, and evaluation of optimizations in a just-in-time compiler , 1999, JAVA '99.

[22]  Thorsten von Eicken,et al.  Incorporating Memory Management into User-Level Network Interfaces , 1997 .