A fresh look at optimizing array bound checking
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
Efficiently computing static single assignment form and the control dependence graph
ACM Transactions on Programming Languages and Systems (TOPLAS)
Debugging optimized code with dynamic deoptimization
PLDI '92 Proceedings of the ACM SIGPLAN 1992 conference on Programming language design and implementation
Optimizing array bound checks using flow analysis
ACM Letters on Programming Languages and Systems (LOPLAS)
Optimizing dynamically-dispatched calls with run-time type feedback
PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation
A simple graph-based intermediate representation
IR '95 Papers from the 1995 ACM SIGPLAN workshop on Intermediate representations
Software—Practice & Experience
The Jalapeño dynamic optimizing compiler for Java
JAVA '99 Proceedings of the ACM 1999 conference on Java Grande
ABCD: eliminating array bounds checks on demand
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Field analysis: getting useful and low-cost interprocedural information
PLDI '00 Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
Effective null pointer check elimination utilizing hardware trap
ASPLOS IX Proceedings of the ninth international conference on Architectural support for programming languages and operating systems
A Compiler for the Java HotSpotTM Virtual Machine
The School of Niklaus Wirth, "The Art of Simplicity"
Effective Enhancement of Loop Versioning in Java
CC '02 Proceedings of the 11th International Conference on Compiler Construction
A Comprehensive Approach to Array Bounds Check Elimination for Java
CC '02 Proceedings of the 11th International Conference on Compiler Construction
Towards array bound check elimination in Java TM virtual machine language
CASCON '99 Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research
Safe Class and Data Evolution in Large and Long-Lived Java[tm] Applications
Safe Class and Data Evolution in Large and Long-Lived Java[tm] Applications
Optimized interval splitting in a linear scan register allocator
Proceedings of the 1st ACM/USENIX international conference on Virtual execution environments
The DaCapo benchmarks: java benchmarking development and analysis
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
The java hotspotTM server compiler
JVM'01 Proceedings of the 2001 Symposium on JavaTM Virtual Machine Research and Technology Symposium - Volume 1
Array bounds check elimination for the Java HotSpot™ client compiler
Proceedings of the 5th international symposium on Principles and practice of programming in Java
Design of the Java HotSpot™ client compiler for Java 6
ACM Transactions on Architecture and Code Optimization (TACO)
Improving compiler-runtime separation with XIR
Proceedings of the 6th ACM SIGPLAN/SIGOPS international conference on Virtual execution environments
Automatic feedback-directed object fusing
ACM Transactions on Architecture and Code Optimization (TACO)
Proceedings of the 2013 ACM international symposium on New ideas, new paradigms, and reflections on programming & software
Hi-index | 0.00 |
Whenever an array element is accessed, Java virtual machines execute a compare instruction to ensure that the index value is within the valid bounds. This reduces the execution speed of Java programs. Array bounds check elimination identifies situations in which such checks are redundant and can be removed. We present an array bounds check elimination algorithm for the Java HotSpot(TM) VM based on static analysis in the just-in-time compiler. The algorithm works on an intermediate representation in static single assignment form and maintains conditions for index expressions. It fully removes bounds checks if it can be proven that they never fail. Whenever possible, it moves bounds checks out of loops. The static number of checks remains the same, but a check inside a loop is likely to be executed more often. If such a check fails, the executing program falls back to interpreted mode, avoiding the problem that an exception is thrown at the wrong place. The evaluation shows a speedup near to the theoretical maximum for the scientific SciMark benchmark suite and also significant improvements for some Java Grande benchmarks. The algorithm slightly increases the execution speed for the SPECjvm98 benchmark suite. The evaluation of the DaCapo benchmarks shows that array bounds checks do not have a significant impact on the performance of object-oriented applications.