OpenJIT: An Open-Ended, Reflective JIT Compiler Framework for Java

  • Hirotaka Ogawa
  • Kouya Shimura
  • Satoshi Matsuoka
  • Fuyuhiko Maruyama
  • Yukihiko Sohda
  • Yasunori Kimura
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 1850)


OpenJIT is an open-ended, reflective JIT compiler framework for Java being researched and developed in a joint project by Tokyo Inst. Tech. and Fujitsu Ltd. Although in general self-descriptive systems have been studied in various contexts such as reflection and interpreter/compiler bootstrapping, OpenJIT is a first system we know to date that offers a stable, full-fledged Java JIT compiler that plugs into existing monolithic JVMs, and offer competitive performance to JITs typically written in C or C++. This is in contrast to previous work where compilation did not occur in the execution phase, customized VMs being developed ground-up, performance not competing with existing optimizing JIT compilers, and/or only a subset of the Java language being supported. The main contributions of this paper are, 1) we propose an architecture for a reflective JIT compiler on a monolithic VM, and identify the technical challenges as well as the techniques employed, 2) We define an API that adds to the existing JIT compiler APIs in “classic” JVM to allow reflective JITs to be constructed, 3) We show detailed benchmarks of run-time behavior of OpenJIT to demonstrate that, while being competitive with existing JITs the time- and space-overheads of compiler metaobjects that exist in the heap are small and manageable. Being an object-oriented compiler framework, OpenJIT can be configured to be small and portable or fully-fledged optimizing compiler framework in the spirit of SUIF. It is fully JCK compliant, and runs all large Java applications we have tested to date including HotJava. We are currently distributing OpenJIT for free to foster further research into advanced compiler optimization, compile-time reflection, advanced run-time support for languages, as well as other areas such as embedded computing, metacomputing, and ubiquitous computing.


Native Code Distribute Shared Memory Intermediate Language Intermediate Code Distribute Shared Memory System 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. [1]
    B. Alpern, D. Attanasio, A. Cocchi, D. Lieber, S. Smith, T. Ngo, and J. J. Barton. Implementing Jalapeno in Java. In Proceedings of OOPSLA’ 99, pages 314–324, November 1999.Google Scholar
  2. [2]
    Y. Aridor, M. Factor, and A. Teperman. cJVM: a Single System Image of a JVM on a Cluster. In Proceedings of ICPP’ 99, September 1999.Google Scholar
  3. [3]
    M. Atkinson, L. Daynes, M. Jordan, T. Printezis, and S. Spence. An Orthogonally Persistent Java. ACM SIGMOD Record, 25(4), December 1996.Google Scholar
  4. [4]
    S. Chiba. A Metaobject Protocol for C++. In Proceedings of OOPSLA’ 95, pages 285–299, 1995.Google Scholar
  5. [5]
    S. Chiba. Javassist-A Reflection-based Programming Wizard for Java. In Proceedings of OOPSLA’98 Workshop on Reflective Programming in C++ and Java, October 1998.Google Scholar
  6. [6]
    S. Dieckman and U. Holzle. A Study of the Allocation Behavior of the SPECjvm98 Java Benchmarks. In Proceedings of ECOOP’ 99, pages 92–115, 1999.Google Scholar
  7. [7]
    D. R. Engler and T. A. Proebsting. vcode: a retargetable, extensible, very fast dynamic ocde generation system. In Proceedings of PLDI’ 96, 1996.Google Scholar
  8. [8]
    N. Fujinami. Automatic and Efficient Run-Time Code Generation Using Object-Oriented Languages. In Proceedings of ISCOPE’ 97, December 1997.Google Scholar
  9. [9]
    A. Goldberg and D. Robson. Smalltalk-80: The Language and Its Implementation. Addison-Wesley, Reading, MA, 1983.Google Scholar
  10. [10]
    M. Golm. metaXa and the Futre of Reflection. In Proceedings of OOPSLA’98 Workshop on Reflective Programming in C++ and Java, October 1998.Google Scholar
  11. [11]
    B. Grant, M. Philipose, M. Mock, C. Chambers, and S. Eggers. An Evaluation of Staged Run-time Optimization in DyC. In Proceedings of PLDI’ 99, 1999.Google Scholar
  12. [12]
    U. Holzle. Adaptive optimization for Self: Reconciling High Performance with Exploratory Programming. Technical Report STAN-CS-TR-94-1520, Stanford CSD, 1995.Google Scholar
  13. [13]
    Y. Ichisugi and Y. Roudier. Extensible Java Preprocessor Kit and Tiny Data-Parallel Java. In Proceedings of ISCOPE’ 97, December 1997.Google Scholar
  14. [14]
    D. Ingalls, T. Kaehler, J. Maloney, S. Wallace, and A. Kay. Back to the Future: The Story of Squeak-A Usable Small talk Written in Itself. In Proceedings of OOPSLA’ 97, pages 318–326, October 1997.Google Scholar
  15. [15]
    M. Karaorman, U. Holzle, and J. Bruno. iContractor: A Reflective Java Library to Support Design by Contract. In Proceedings of Reflection’ 99, pages 175–196, July1999.Google Scholar
  16. [16]
    G. Kiczales, J. Lamping, A. Mendhekar, C. Maeda, C. Lopes, J.-M. Loingtier, and J. Irwin. Aspect-Oriented Programming. In Proceedings of ECOOP’ 97, pages 220–242, 1997.Google Scholar
  17. [17]
    H. Masuhara, S. Matsuoka, K. Asai, and A. Yonezawa. Compiling Away the Meta-Level in Object-Oriented Concurrent Reflective Languages Using Partial Evaluation. In Proceedings of OOPSLA’ 95, pages 57–64, October 1995.Google Scholar
  18. [18]
    H. Masuhara and A. Yonezawa. Design and Partial Evaluation of Meta-objects for a Concurrent Reflective Language. In Proceedings of ECOOP’ 98, pages 418–439, July 1998.Google Scholar
  19. [19]
    S. Matsuoka, H. Ogawa, K. Shimura, Y. Kimura, and K. Hotta. OpenJIT-A Reflective Java JIT Compiler. In Proceedings of OOPSLA’98 Workshop on Reflective Programming in C++ and Java, October 1998.Google Scholar
  20. [20]
    H. Ogawa, K. Shimura, S. Matsuoka, F. Maruyama, Y. Sohda, and Y. Kimura. OpenJIT Frontend System: an implementation of the reflective JIT compiler frontend. LNCS 1826: Reflection and Software Engineering, 2000 (to appear).Google Scholar
  21. [21]
    I. Piumarta and F. Riccardi. Optimizing Direct-threaded Code by Selective Inlining. In ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI’ 98), pages 291–300, June 1998.Google Scholar
  22. [22]
    U. P. Schultz, J. L. Lawall, C. Consel, and G. Muller. Towards Automatic Specialization of Java Programs. In Proceedings of ECOOP’ 99, June 1999.Google Scholar
  23. [23]
    K. Shimura. OpenJIT Backend Compiler., June 1998.
  24. [24]
    K. Shimura and Y. Kimura. Experimental development of java jit compiler. In IPSJ SIG Notes 96-ARC-120, pages 37–42, October 1996.Google Scholar
  25. [25]
    K. Shimura and S. Matsuoka. OpenJIT Backend Compiler (Runtime) Internal Specification version 1.1.7., October 1999.
  26. [26]
    Y. Sohda, H. Ogawa, and S. Matsuoka. OMPC++-A Portable High-Performance Implementation of DSM using OpenC++ Reflection. In Proceedings of Reflection’ 99, pages 215–234, July 1999.Google Scholar
  27. [27]
    M. Tatsubori and S. Chiba. Programming Support of Design Patterns with Compile-time Reflection. In Proceedings of OOPSLA’98 Workshop on Reflective Programming in C++ and Java, October 1998.Google Scholar
  28. [28]
    Stanford University. SUIF Homepage.
  29. [29]
    E. N. Volanschi, C. Consel, and C. Cowan. Declarative Specialization of Object-Oriented Programs. In Proceedings of OOPSLA’ 97, pages 286–300, October 1997.Google Scholar
  30. [30]
    I. Welch and R. Stroud. From Dalang to Kava-the Evolution of a Reflective Java Extention. In Proceedings of Reflection’ 99, pages 2–21, July 1999.Google Scholar
  31. [31]
    M. Welsh and D. Culler. Jaguar: Enabling Efficient Communication and I/O from Java. Concurrency: Practice and Experience, December 1999. Special Issue on Java for High-Performance Applications.Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2000

Authors and Affiliations

  • Hirotaka Ogawa
    • 1
  • Kouya Shimura
    • 2
  • Satoshi Matsuoka
    • 1
  • Fuyuhiko Maruyama
    • 1
  • Yukihiko Sohda
    • 1
  • Yasunori Kimura
    • 2
  1. 1.Tokyo Institute of TechnologyJapan
  2. 2.Fujitsu Laboratories LimitedJapan

Personalised recommendations