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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

42<br />

application. Once the bottleneck is identified, optimizations can be performed on<br />

portions of the code that will have the greatest impact. The profile data collected<br />

typically includes some combination of information about memory allocation and<br />

garbage collection, threading and deadlock, and CPU performance. These tools do<br />

not record the bytecodes executed because it is not necessary in order to identify<br />

the performance issues they are designed to solve. Examples of some of these tools<br />

include JProbe [6], Optimizeit Enterprise Suite [24] and JInsight [88]. A list of several<br />

additional tools is available at Java Performance Tuning [98].<br />

3.3.2 Other Profiling Studies<br />

A number of other studies have been conducted which profile the characteristics of<br />

Java applications. Some of these studies are conducted at the bytecode level while<br />

others examine higher level behaviors.<br />

High Level Profiling<br />

High level metrics describe some aspect of the behaviour of an application. While<br />

the results are inherently a result of the bytecodes that are executed, the measures<br />

typically do not involve examining every bytecode executed.<br />

Metrics collected may be static, based on the files that make up the application,<br />

or dynamic, based on data collected as the application runs. Many static metrics<br />

are examined in Fenton and Pfleeger’s book [48]. Static metrics have also been the<br />

subject of numerous conference papers [32, 111, 21] and journal articles [77, 26].<br />

Dynamic metrics are collected as the application runs. They consider behaviors<br />

that cannot be determined from the application source code alone. One example<br />

of a dynamic metric is the level of runtime coupling between classes [80, 81]. This<br />

measure is used in software engineering circles in order to assess the complexity of understanding,<br />

enhancing and correcting an application. Dufour, Driesen, Hendren and<br />

Verbrugge describe several other dynamic metrics for Java [45]. These metrics cover<br />

five different behaviors of a Java application which include its size, data structure,<br />

memory use, concurrency and polymorphism.<br />

Bytecode Level Profiling<br />

Previous studies have been conducted that examine the bytecode profile of Java applications.<br />

The simplest of these studies perform static profiling. This involves examining<br />

the Java class files that make up the application directly, without actually

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

Saved successfully!

Ooh no, something went wrong!