| # Overview |
| |
| The Ideal Graph Visualizer is a tool developed to help examine the intermediate |
| representation of C2 which is commonly referred to as the "ideal graph". It was |
| developed in collaboration with the University of Linz in Austria and has been |
| included as part of hotspot since that was the primary target of the tool. The |
| tool itself is fairly general with only a few modules that contain C2 specific |
| elements. |
| |
| The tool is built on top of the NetBeans 7 rich client infrastructure and so |
| requires NetBeans to build. It currently requires at least Java 6 to run as it |
| needs support for JavaScript for its filtering mechanism and assumes it's built |
| into the platform. It should build out of the box with NetBeans 7.0 and Java 6 |
| or later. |
| |
| # Building and Running |
| |
| The build system used for IGV is ant. To download all required libraries and |
| build IGV, issue `ant build`. To run IGV, use the `igv.sh` command; it will put |
| all log messages generated by the run to the file `.igv.log`. To see all log |
| messages generated during an IGV run, use `ant run`. |
| |
| # Usage |
| |
| The JVM support is controlled by the flag `-XX:PrintIdealGraphLevel=#` where `#` |
| is: |
| |
| * 0: no output, the default |
| * 1: dumps graph after parsing, before matching, and final code (also dumps |
| graphs for failed compilations, if available) |
| * 2: more detail, including after loop opts |
| * 3: even more detail |
| * 4: prints graph after parsing every bytecode (very slow) |
| |
| By default the JVM expects that it will connect to a visualizer on the local |
| host on port 4444. This can be configured using the options |
| `-XX:PrintIdealGraphAddress=` and `-XX:PrintIdealGraphPort=`. |
| `PrintIdealGraphAddress` can actually be a hostname. |
| |
| It is advisable to run the JVM with background compilation disabled (-Xbatch). |
| Compilations going on in the background may be cancelled when the VM terminates, |
| which can lead to incomplete dumps being sent to IGV. |
| |
| Alternatively the output can be sent to a file using |
| `-XX:PrintIdealGraphFile=filename`. Each compiler thread will get it's own file |
| with unique names being generated by adding a number onto the provided file |
| name. |
| |
| More information about the tool is available at |
| https://wiki.openjdk.java.net/display/HotSpot/IdealGraphVisualizer. |