Skip to main content

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

  • Conference paper
  • First Online:
ECOOP 2000 — Object-Oriented Programming (ECOOP 2000)

Part of the book series: Lecture Notes in Computer Science ((LNCS,volume 1850))

Included in the following conference series:

Abstract

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.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 39.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  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. 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. 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. S. Chiba. A Metaobject Protocol for C++. In Proceedings of OOPSLA’ 95, pages 285–299, 1995.

    Google Scholar 

  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. 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. 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. N. Fujinami. Automatic and Efficient Run-Time Code Generation Using Object-Oriented Languages. In Proceedings of ISCOPE’ 97, December 1997.

    Google Scholar 

  9. A. Goldberg and D. Robson. Smalltalk-80: The Language and Its Implementation. Addison-Wesley, Reading, MA, 1983.

    Google Scholar 

  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. 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. 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. Y. Ichisugi and Y. Roudier. Extensible Java Preprocessor Kit and Tiny Data-Parallel Java. In Proceedings of ISCOPE’ 97, December 1997.

    Google Scholar 

  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. 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. 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. 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. 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. 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. 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. 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. 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. K. Shimura. OpenJIT Backend Compiler. http://www.openjit.org/docs/backend-compiler/openjit-shimura-doc-1.pdf, June 1998.

  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. K. Shimura and S. Matsuoka. OpenJIT Backend Compiler (Runtime) Internal Specification version 1.1.7. http://www.openjit.org/docs/backend-internal/index.html, October 1999.

  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. 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. Stanford University. SUIF Homepage. http://www-suif.stanford.edu/.

  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. 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. 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 

Download references

Author information

Authors and Affiliations

Authors

Editor information

Editors and Affiliations

Rights and permissions

Reprints and permissions

Copyright information

© 2000 Springer-Verlag Berlin Heidelberg

About this paper

Cite this paper

Ogawa, H., Shimura, K., Matsuoka, S., Maruyama, F., Sohda, Y., Kimura, Y. (2000). OpenJIT: An Open-Ended, Reflective JIT Compiler Framework for Java. In: Bertino, E. (eds) ECOOP 2000 — Object-Oriented Programming. ECOOP 2000. Lecture Notes in Computer Science, vol 1850. Springer, Berlin, Heidelberg. https://doi.org/10.1007/3-540-45102-1_18

Download citation

  • DOI: https://doi.org/10.1007/3-540-45102-1_18

  • Published:

  • Publisher Name: Springer, Berlin, Heidelberg

  • Print ISBN: 978-3-540-67660-7

  • Online ISBN: 978-3-540-45102-0

  • eBook Packages: Springer Book Archive

Publish with us

Policies and ethics