Design and Implementation of Pep, A Java Just-in-Time Translator

Java, a new object-oriented member of the C family of languages, has become popular in part because it emphasizes portability. Portability is achieved by compiling programs to machine-independent bytecodes that can be interpreted on a Java virtual machine. Unfortunately, interpreted performance does not match native code performance. A just-in-time compiler can regain performance without sacrificing portability by turning the bytecodes into native code at runtime. This idea has a proven track record: Deutsch and Schiffman presented a dynamic Smalltalk compiler in 1984 [5], and the Self system currently sports a dynamic type-feedback based optimizing compiler [12]. To study the performance potential of Java with this state-of-the-art optimization technology, we built Pep, a just-in-time compiler from Java bytecodes to Self. Following translation by Pep, Java programs can execute on the Self virtual machine and benefit from the optimizations performed by Self's compiler. We describe the design and implementation of Pep, focusing on concepts and trade-offs, but also compare performance with the JDK 1.0.2 and 1.1 interpreters. © 1997 John Wiley & Sons, Inc.

[1]  Urs Hölzle,et al.  Reconciling responsiveness with performance in pure object-oriented languages , 1996, TOPL.

[2]  Georg Sander,et al.  Graph Layout through the VCG Tool , 1994, GD.

[3]  GoslingJames Java intermediate bytecodes , 1995 .

[4]  L. Peter Deutsch,et al.  Efficient implementation of the smalltalk-80 system , 1984, POPL.

[5]  Michael Franz,et al.  Slim binaries , 1997, CACM.

[6]  Robert Wilson,et al.  Compiling Java just in time , 1997, IEEE Micro.

[7]  Cristina Cifuentes,et al.  Structuring Decompiled Graphs , 1996, CC.

[8]  James Gosling,et al.  Java Intermediate Bytecode , 1995, Intermediate Representations Workshop.

[9]  Craig Chambers,et al.  An efficient implementation of SELF, a dynamically-typed object-oriented language based on prototypes , 1989, OOPSLA '89.

[10]  Ulrike Lichtblau Decompilation of Control Structures by Means of Graph Transformations , 1985, TAPSOFT, Vol.1.

[11]  Dennis Volper,et al.  UCSD Pascal on the VAX, portability and performance , 1984, Softw. Pract. Exp..

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

[13]  Randall B. Smith,et al.  Programming as an Experience: The Inspiration for Self , 1995, ECOOP.

[14]  Brenda S. Baker,et al.  An Algorithm for Structuring Flowgraphs , 1977, J. ACM.

[15]  Brian T. Lewis,et al.  Clarity MCode: A Retargetable Intermediate Representation for Compilation , 1995, Intermediate Representations Workshop.

[16]  Bjørn N. Freeman-Benson,et al.  Multi‐way versus one‐way constraints in user interfaces: Experience with the deltablue algorithm , 1993, Softw. Pract. Exp..

[17]  Randall B. Smith,et al.  SELF: The power of simplicity , 1987, OOPSLA '87.

[18]  Bjarne Stroustrup,et al.  Multiple Inheritance for C++ , 1989, Comput. Syst..