Fast, effective code generation in a just-in-time Java compiler
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
An evaluation of staged run-time optimizations in DyC
Proceedings of the ACM SIGPLAN 1999 conference on Programming language design and implementation
Quicksilver: a quasi-static compiler for Java
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Adaptive optimization in the Jalapeño JVM (poster session)
OOPSLA '00 Addendum to the 2000 proceedings of the conference on Object-oriented programming, systems, languages, and applications (Addendum)
A framework for efficient reuse of binary code in Java
ICS '01 Proceedings of the 15th international conference on Supercomputing
The Java Language Specification
The Java Language Specification
TurboJ, a Java Bytecode-to-Native Compiler
LCTES '98 Proceedings of the ACM SIGPLAN Workshop on Languages, Compilers, and Tools for Embedded Systems
Coupling on-line and off-line profile information to improve program performance
Proceedings of the international symposium on Code generation and optimization: feedback-directed and runtime optimization
Efficient JavaVM Just-in-Time Compilation
PACT '98 Proceedings of the 1998 International Conference on Parallel Architectures and Compilation Techniques
A brief history of just-in-time
ACM Computing Surveys (CSUR)
Adaptive code unloading for resource-constrained JVMs
Proceedings of the 2004 ACM SIGPLAN/SIGBED conference on Languages, compilers, and tools for embedded systems
Jazzing up JVMs with off-line profile data: does it pay?
ACM SIGPLAN Notices
Improving virtual machine performance using a cross-run profile repository
OOPSLA '05 Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Compilation Techniques for Real-Time Java Programs
Proceedings of the International Symposium on Code Generation and Optimization
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
Harissa: a flexible and efficient java environment mixing bytecode and compiled code
COOTS'97 Proceedings of the 3rd conference on USENIX Conference on Object-Oriented Technologies (COOTS) - Volume 3
Toba: java for applications a way ahead of time (WAT) compiler
COOTS'97 Proceedings of the 3rd conference on USENIX Conference on Object-Oriented Technologies (COOTS) - Volume 3
Hi-index | 0.00 |
Many embedded Java platforms execute two types of Javaclasses: those installed statically on the client device and thosedownloaded dynamically from service providers at run time. Forachieving higher performance, the static Java classes can becompiled into machine code by ahead-of-time compiler (AOTC) in theserver, and the translated machine code can be installed on theclient device. Unfortunately, AOTC cannot be applicable to thedynamically downloaded classes. This paper proposesclient-AOTC (c-AOTC), which performs AOTC on the clientdevice using the just-in-time compiler (JITC) module installed onthe device, obviating the JITC overhead and complementing theserver-AOTC. The machine code of a method translated by JITC iscached on a persistent memory of the device, and when the method isinvoked again in a later run of the program, the machine code isloaded and executed directly without any translation overhead. Amajor issue in c-AOTC is relocation because some of theaddress constants embedded in the cached machine code are notcorrect when the machine code is loaded and used in a differentrun; those addresses should be corrected before they are used.Constant pool resolution and inlining complicate the relocationproblem, and we propose our solutions. The persistent memoryoverhead for saving the relocation information is also an issue,and we propose a technique to encode the relocation information andcompress the machine code efficiently. We developed a c-AOTC onSun's CDC VM reference implementation, and our evaluation resultsindicate that c-AOTC can improve the performance significantly, asmuch as an average of 12% for EEMBC and 4% for SpecJVM98, with apersistent memory overhead of 1% on average. Copyright © 2008John Wiley & Sons, Ltd.This is a revised and expanded version of a paper published inACM SIGPLAN-SIGBED 2007 Conference on Languages, Compilers, andTools for Embedded Systems (LCTES'07) [1].