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.

41<br />

each bytecode executed as was accomplished in Chapter 5 and Chapter 7. In addition,<br />

the interface can be used to record the operand values provided to those bytecodes<br />

as was accomplished in Chapter 6. However, this interface does not provide the<br />

capability to modify the instruction set for the virtual machine which is functionality<br />

critical to the implementation of multicodes, discussed in Chapter 7.<br />

The JVM Profiler Interface<br />

In conjunction with the JVM Debug Interface [105], the JVM Profiler Interface [104]<br />

provides functionality that is similar to that of the newer JVM Tool Interface. The<br />

JVMPI was introduced in version 1.1 of the Java Software Development Kit as an<br />

experimental profiling interface. It retained that status when it was ported to the<br />

HotSpot virtual machine in version 1.3.0.<br />

Like the JVMTI, the JVMPI provides sufficient functionality to perform the profiling<br />

activities described in Chapters 5, 6 and 7. However, the JVMPI does not<br />

provide functionality for adding new bytecodes. Consequently, it can only be used to<br />

aid in the profiling required in order to identify of multicodes. It is not possible to<br />

use the JVMPI to implement multicodes without making other modifications to the<br />

virtual machine.<br />

Profiling Tools<br />

The Sable Research Group at McGill University has developed a profiling tool known<br />

as *J which gathers information about Java applications as they execute [46]. This<br />

tool, which makes use of the JVMPI to collect its data, includes a trace generator<br />

which records the application’s behaviour. It also consists of a trace analyzer which<br />

analyzes the trace data to generate dynamic metrics and store them in a database.<br />

Examples of the metrics that can be reported include the number of bytecodes touched<br />

during the execution of an application and the average number of distinct receiver<br />

objects per call site among many others.<br />

It isn’t clear if *J is capable of recording statistics related to how many times each<br />

opcode is executed or the information necessary to identify the sequences of bytecodes<br />

executed in its as-distributed form. However, it was designed with extensibility in<br />

mind, suggesting that adding this functionality would not be overly difficult if it is<br />

not already supported.<br />

Many additional high level profiling tools are available. These tools concentrate<br />

on collecting profile data that will help identify performance bottlenecks within the

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

Saved successfully!

Ooh no, something went wrong!