13.10.2014 Views

OPTIMIZING THE JAVA VIRTUAL MACHINE INSTRUCTION SET BY ...

OPTIMIZING THE JAVA VIRTUAL MACHINE INSTRUCTION SET BY ...

OPTIMIZING THE JAVA VIRTUAL MACHINE INSTRUCTION SET BY ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

62<br />

phone numbers before the add, delete, find and sort operations are performed.<br />

213 javac: Generates Java class files from Java source code using the<br />

Java compiler from Sun’s Java Development Kit version 1.0.2.<br />

222 mpegaudio: This application decompresses MPEG Layer-3 audio<br />

files. A code obfuscater was used on the class files that make up the<br />

application.<br />

227 mtrt: Uses ray tracing to generate a scene depicting a dinosaur.<br />

Two threads of execution run in parallel, each rendering the scene.<br />

228 jack: This tool is an automatic compiler parser generator which<br />

generates itself several times. The benchmark is an early version [79] of<br />

the application now known as JavaCC [8].<br />

4.2.3 Kaffe Performance<br />

When this study was begun it was assumed that the Kaffe virtual machine would<br />

show the greatest performance loss as a result of despecialization. This expectation<br />

was based on the fact that the Kaffe interpreter does not perform any advanced optimizations.<br />

As a result, there was no possibility that the extra work introduced<br />

by performing despecialization would subsequently be removed during an optimization<br />

process. It was expected that there would be a particularly large increase in<br />

application runtime when widening and non-integer constant despecializations were<br />

performed. For widening despecializations, this expectation was based on the fact<br />

that the process of loading a value from the constant pool is considerably more involved<br />

than the process of decoding the arguments to a bipush or sipush bytecode.<br />

Similarly, loading a value from the constant pool is much more expensive than placing<br />

a non-integer constant value directly onto the operand stack, leading to this expectation<br />

for non-integer constant despecialization. It was also expected that branch<br />

despecializations that result in an additional iconst 0 or swap bytecode being introduced<br />

would be harmful to application performance because an extra iteration of the<br />

fetch-decode-execute process must be performed to handle the additional bytecode.<br />

The results of testing the despecialization conditions outlined previously in Table<br />

4.6 are summarized in Table 4.7. It shows the total change in performance across<br />

all 7 benchmarks tested when compared to the baseline execution time. This value

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!