ACM Transactions on Programming Languages and Systems (TOPLAS)
Efficient Java exception handling in just-in-time compilation
Proceedings of the ACM 2000 conference on Java Grande
A single intermediate language that supports multiple implementations of exceptions
PLDI '00 Proceedings of the ACM SIGPLAN 2000 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
Comparison of Compacting Algorithms for Garbage Collection
ACM Transactions on Programming Languages and Systems (TOPLAS)
A study of exception handling and its dynamic optimization in Java
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
The Java Language Specification
The Java Language Specification
Overview of excelsior JET, a high performance alternative to java virtual machines
WOSP '02 Proceedings of the 3rd international workshop on Software and performance
IEEE Concurrency
TurboJ, a Java Bytecode-to-Native Compiler
LCTES '98 Proceedings of the ACM SIGPLAN Workshop on Languages, Compilers, and Tools for Embedded Systems
A brief history of just-in-time
ACM Computing Surveys (CSUR)
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
Hybrid compilation and optimization for java-based digital TV platforms
ACM Transactions on Embedded Computing Systems (TECS) - Special Section ESFH'12, ESTIMedia'11 and Regular Papers
Hi-index | 0.00 |
One of the most promising approaches to Java acceleration in embedded systems is a bytecode-to-C ahead-of-time compiler (AOTC). It improves the performance of a Java virtual machine (JVM) by translating bytecode into C code, which is then compiled into machine code via an existing C compiler. One important design issue in AOTC is efficient exception handling. Since the excepting point and the exception handler may locate in different methods on a call stack, control transfer between them should be streamlined, while an exception would be an ''exceptional'' event, so it should not slow down normal execution paths. Previous AOTCs often employed a technique called stack cutting based on a setjmp()/longjmp() pair, which we found is involved with too much performance overheads. Also, when the AOTC and the interpreter are employed concurrently (e.g., some methods are AOTCed while other methods are interpreted), the performance of normal execution paths is affected more seriously. This paper proposes a simpler solution based on an exception check after each method call, merged with garbage collection check for reducing its overhead. Our evaluation results on SPECjvm98 on Sun's CVM indicate that our technique can improve the performance of stack cutting by more than 25%. A similar performance benefit can be noted on a hybrid execution environment of both the AOTC and the interpreter.