{'fraction_non_alphanumeric': 0.011889035667107, 'fraction_numerical': 0.0, 'mean_word_length': 5.3924050632911396, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Incorporating Better Register Allocation into Jikes

In dynamically compiled code, it is important not only that the compiler produce fast code, but also that the compiler itself costs little overhead to the runtime application. These two competing goals motivate the importance of accurate cost-benefit analysis for any optimizations performed in a dynamic compilation system. The Jikes RVM, which performs Just-In-Time (JIT) compilation of Java bytecodes, is an example of such a dynamic compiler. One of the most important components of a JIT compiler is register allocation because memory accesses are becoming increasingly expensive relative to register accesses. Jikes has opted to use exclusively a linear scan register allocator in its optimizing compiler because the linear scan algorithm is fast and provides performance nearly as good as more complicated register allocation algorithms. This paper seeks to improve the runtime performance of applications run by the Jikes RVM by incorporating a more exhaustive register allocation scheme for use on code for which the benefit would be large enough to justify the extra compilation effort. This was accomplished with partial success by adding an additional optimization level to the Jikes RVM and calibrating the necessary cost-benefit parameters in the configuration files. Our results suggest that the modifications we made improve the performance of the Jikes RVM on computationally intensive code without sacrificing much performance on smaller jobs.