前々回、前回と2回にわたって、タブを表示するVisualVMのプラグインを作成してきました。
サンプルとして作成したHeapIndicatorプラグインは文字だけでヒープで使用量を表示しました。しかし、これではちょっと淋しいので、今回はグラフで表示するようにプラグインを改造していきます。
チャートの生成
現状、VisualVMで提供しているグラフ(チャート)は折れ線グラフ(ラインチャート)だけです。なお、チャートはVisualVM 1.2からの機能なので、JDK 6に添付しているVisualVMでは使用できません。
おもしろいことに、チャートを表示するGUIコンポーネントは提供されていません。では何が提供されているかというと、GUIコンポーネントを作成するためのファクトリクラスが提供されています。
ファクトリクラスに相当するのがcom.sun.tools.visualvm.chart.SimpleXYChartSupportクラスです。
SimpleXYChartSupportクラスと同じパッケージにChartFactoryクラスがあります。名前だけ聞くとChartFactoryクラスがファクトリクラスのようですが、実際にはSimpleXYChartSupportオブジェクトを生成するためのファクトリクラスになります。
チャートを使用するには、次のように処理を記述します。
- y軸に表示する値の単位を決め、SimpleXYChartDescriptorオブジェクトを生成する
- SimpleXYChartDescritorオブジェクトに対し、タイトル、項目などチャートのメタデータをセットする
- ChartFactoryクラスを使用し、SimpleXYChartDescriptorオブジェクトからSimpleXYChartSupportオブジェクトを生成する
- SimpleXYChartSupportオブジェクトからチャートを表すGUIコンポーネントを取得し、描画の設定を行う
- SimpleXYChartSupportオブジェクトに対し、値を追加していく
ちょっと処理が多いような気もしますが、自分でグラフを描画するのに比べれば雲泥の差です。
それでは、このSimpleXYChartSupportクラスを使って、前回作成したヒープを監視するHeapIndicatorプラグインを改良していきましょう。
前回、HeapIndicatorが表示するタブの内部にあるサブタブに、ヒープの使用量をラベルで表示しました。この部分をチャートに置き換えてみます。
前回はヒープ、ノンヒープだけでなく、Eden領域、Survivor領域、Tenured領域の使用量を表示しましが、これらをすべてチャートにしてしまうとチャートの表示領域が狭くなってしまいます。
そこで、ヒープとノンヒープは省略し、Eden領域、Survivor領域、Tenured領域の3つの領域をチャート化します。
3つのチャートがありますが、すべて作成する手順は同一なので、HeapIndicatorクラスのcreateChartSupportメソッドにまとめました。