PLDI '92 Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation
Optimal code motion: theory and practice
ACM Transactions on Programming Languages and Systems (TOPLAS)
Design, implementation, and evaluation of optimizations in a just-in-time compiler
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
A study of devirtualization techniques for a Java Just-In-Time compiler
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Global optimization by suppression of partial redundancies
Communications of the ACM
Java Virtual Machine Specification
Java Virtual Machine Specification
The Java Language Specification
The Java Language Specification
Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Eliminating Virtual Function Calls in C++ Programs
ECCOP '96 Proceedings of the 10th European Conference on Object-Oriented Programming
LaTTe: A Java VM Just-in-Time Compiler with Fast and Efficient Register Allocation
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
IBM Systems Journal
Cross-Architectural Performance Portability of a Java Virtual Machine Implementation
Proceedings of the 2nd Java Virtual Machine Research and Technology Symposium
Sentinel PRE: Hoisting beyond Exception Dependency with Dynamic Deoptimization
Proceedings of the international symposium on Code generation and optimization
Semantic Foundations and Inference of Non-null Annotations
FMOODS '08 Proceedings of the 10th IFIP WG 6.1 international conference on Formal Methods for Open Object-Based Distributed Systems
Static Detection of Place Locality and Elimination of Runtime Checks
APLAS '08 Proceedings of the 6th Asian Symposium on Programming Languages and Systems
Dynamic aspects for runtime fault determination and recovery
IPDPS'06 Proceedings of the 20th international conference on Parallel and distributed processing
Hi-index | 0.00 |
We present a new algorithm for eliminating null pointer checks from programs written in Java™. Our new algorithm is split into two phases. In the first phase, it moves null checks backward, and it is iterated for a few times with other optimizations to eliminate redundant null checks and maximize the effectiveness of other optimizations. In the second phase, it moves null checks forward and converts many null checks to hardware traps in order to minimize the execution cost of the remaining null checks. As a result, it eliminates many null checks effectively and exploits the maximum use of hardware traps. This algorithm has been implemented in the IBM cross-platform Java Just-in-Time (JIT) compiler. Our experimental results show that our approach improves performance by up to 71% for jBYTEmark and up to 10% for SPECjvm98 over the previously known best algorithm. They also show that it increases JIT compilation time by only 2.3%. Although we implemented our algorithm for Java, it is also applicable for other languages requiring null checking.