Adaptive optimization in the Jalapeño JVM
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Quicksilver: a quasi-static compiler for Java
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Application isolation in the Java Virtual Machine
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Java Virtual Machine Specification
Java Virtual Machine Specification
Java Language Specification, Second Edition: The Java Series
Java Language Specification, Second Edition: The Java Series
The Java Language Specification
The Java Language Specification
Dynamic Linking on a Shared-Memory Multiprocessor
PACT '99 Proceedings of the 1999 International Conference on Parallel Architectures and Compilation Techniques
Overview of the IBM Java just-in-time compiler
IBM Systems Journal
Building a Java virtual machine for server applications: the Jvm on 0S/390
IBM Systems Journal
IBM Systems Journal
Tranlating Java to C without Inserting Class Initialization Tests
IPDPS '02 Proceedings of the 16th International Parallel and Distributed Processing Symposium
Supporting Binary Compatibility with Static Compilation
Proceedings of the 2nd Java Virtual Machine Research and Technology Symposium
Java client ahead-of-time compiler for embedded systems
Proceedings of the 2007 ACM SIGPLAN/SIGBED conference on Languages, compilers, and tools for embedded systems
Client ahead-of-time compiler for embedded Java platforms
Software—Practice & Experience
Sharing the runtime representation of classes across class loaders
ECOOP'05 Proceedings of the 19th European conference on Object-Oriented Programming
Reuse of JIT compiled code in JavaScript engine
Proceedings of the 27th Annual ACM Symposium on Applied Computing
Reducing startup time of a deterministic virtualizing runtime environment
Proceedings of the 16th International Workshop on Software and Compilers for Embedded Systems
Reuse of JIT compiled code based on binary code patching in JavaScript engine
Journal of Web Engineering
Hi-index | 0.00 |
This paper presents a compilation framework that enables efficient sharing of executable code across distinct Java Virtual Machine (JVM) instances. High-performance JVMs rely on run-time compilation, since static compilation cannot handle many dynamic features of Java. These JVMs suffer from large memory footprints and high startup costs, which are serious problems for embedded devices (such as hand held personal digital assistants and cellular phones) and scalable servers. A recently proposed approach called quasi-static compilation overcomes these difficulties by reusing precompiled binary images after performing validation checks and stitching on them (i.e., adapting them to a new execution context), falling back to interpretation or dynamic compilation whenever necessary. However, the requirement in our previous design to duplicate and modify the executable binary image for stitching is a major drawback when targeting embedded systems and scalable servers. In this paper, we describe a new approach that allows stitching to be done on an indirection table, leaving the executable code unmodified and therefore writable to read-only memory. On embedded devices, this saves precious space in writable memory. On scalable servers, this allows a single image of the executable to be shared among multiple JVMs, thus improving scalability. Furthermore, we describe a novel technique for dynamically linking classes that uses traps to detect when a class should be linked and initialized. Like back-patching, the technique allows all accesses after the first to proceed at full speed, but unlike back-patching, it avoids the modification of running code. We have implemented this approach in the Quicksilver quasi-static compiler for the Jalape~ no JVM. On the SPECjvm98 benchmark suite, our approach obtains code space savings, in writable memory, of between 82% to 89% of that from our previous quasi-static compiler, while delivering performance that is typically within 1% to 7% of that approach, and which is competitive with the performance of the Jalapeño adaptive optimization system.