Improving code caching performance for Java applications

Java applications rely on just-in-time (JIT) compilers or adaptive compilers to generate and optimize binary code at runtime to boost performance. In conventional Java virtual machines (JVM), however, the binary code is typically written into the data cache, and then is loaded into the instruction cache through the shared L2 cache or memory, which is not efficient. In this paper, we study different efficient code caching strategies to write and read the dynamically generated code faster. Our experimental results indicate that writing code directly into the instruction cache can improve the performance of Java application by up to 42.9%, with 9.6% on average.

[1]  Kathryn S. McKinley,et al.  Dynamic SimpleScalar: Simulating Java Virtual Machines , 2003 .

[2]  Kim Hazelwood,et al.  Generational cache management of code traces in dynamic optimization systems , 2003, Proceedings. 36th Annual IEEE/ACM International Symposium on Microarchitecture, 2003. MICRO-36..

[3]  Stephen J. Fink,et al.  The Jalapeño virtual machine , 2000, IBM Syst. J..

[4]  Narayanan Vijaykrishnan,et al.  Energy-aware code cache management for memory-constrained Java devices , 2003, IEEE International [Systems-on-Chip] SOC Conference, 2003. Proceedings..

[5]  James E. Smith,et al.  Exploring code cache eviction granularities in dynamic optimization systems , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..