前々回前回と2回にわたって、タブを表示するVisualVMのプラグインを作成してきました。

サンプルとして作成したHeapIndicatorプラグインは文字だけでヒープで使用量を表示しました。しかし、これではちょっと淋しいので、今回はグラフで表示するようにプラグインを改造していきます。

チャートの生成

現状、VisualVMで提供しているグラフ(チャート)は折れ線グラフ(ラインチャート)だけです。なお、チャートはVisualVM 1.2からの機能なので、JDK 6に添付しているVisualVMでは使用できません。

おもしろいことに、チャートを表示するGUIコンポーネントは提供されていません。では何が提供されているかというと、GUIコンポーネントを作成するためのファクトリクラスが提供されています。

ファクトリクラスに相当するのがcom.sun.tools.visualvm.chart.SimpleXYChartSupportクラスです。

SimpleXYChartSupportクラスと同じパッケージにChartFactoryクラスがあります。名前だけ聞くとChartFactoryクラスがファクトリクラスのようですが、実際にはSimpleXYChartSupportオブジェクトを生成するためのファクトリクラスになります。

チャートを使用するには、次のように処理を記述します。

  1. y軸に表示する値の単位を決め、SimpleXYChartDescriptorオブジェクトを生成する
  2. SimpleXYChartDescritorオブジェクトに対し、タイトル、項目などチャートのメタデータをセットする
  3. ChartFactoryクラスを使用し、SimpleXYChartDescriptorオブジェクトからSimpleXYChartSupportオブジェクトを生成する
  4. SimpleXYChartSupportオブジェクトからチャートを表すGUIコンポーネントを取得し、描画の設定を行う
  5. SimpleXYChartSupportオブジェクトに対し、値を追加していく

ちょっと処理が多いような気もしますが、自分でグラフを描画するのに比べれば雲泥の差です。

それでは、このSimpleXYChartSupportクラスを使って、前回作成したヒープを監視するHeapIndicatorプラグインを改良していきましょう。

サンプルのソース (こちらからダウンロードできます)
Installer.java
HeapIndicatorProvider.java
HeapIndicator.java

前回、HeapIndicatorが表示するタブの内部にあるサブタブに、ヒープの使用量をラベルで表示しました。この部分をチャートに置き換えてみます。

前回はヒープ、ノンヒープだけでなく、Eden領域、Survivor領域、Tenured領域の使用量を表示しましが、これらをすべてチャートにしてしまうとチャートの表示領域が狭くなってしまいます。

そこで、ヒープとノンヒープは省略し、Eden領域、Survivor領域、Tenured領域の3つの領域をチャート化します。

3つのチャートがありますが、すべて作成する手順は同一なので、HeapIndicatorクラスのcreateChartSupportメソッドにまとめました。