PR

先月に引き続き,今月もJava SE 6u7から提供されることになったVisualVMについて紹介していきます。

前回はVisualVMのプロファイラーの使い方を解説しました。しかし,使い方だけでは,どのようにパフォーマンスチューニングを行えばいいのか,わかりにくかったかもしれません。

そこで,今回は実際にサンプルを使用してパフォーマンスチューニングをしてみましょう。

今回使用するサンプルは,前回と同じマンデルブロ集合を表示するアプリケーションです。

マンデルブロ集合とは以下の漸化式において,n→∞の極限の時にznが無限大に発散しない複素数cの集合です。

式

よく見る,マンデルブロ集合の図はcを複素平面の点とし,無限大に発散するnによって色づけしたものです。マンデルブロ集合に属する点は黒で描画される部分になります。

複素平面をx-y平面と置き換えた場合,上記の式は以下のようになります。

式

ただし,式 としています。

さて,このマンデルブロ集合を描画するアプリケーションは4つのクラスから構成されています。

サンプルのソース (こちらからダウンロードできます)
Mandelbrot.java
MandelbrotPanel.java
MandelbrotWorker.java
Point.java

Mandelbrotクラスがメインクラス,MandelbrotPanelクラスがjavax.swing.JComponentクラスのサブクラスでマンデルブロ集合の描画行うクラスです。

MandelbrotWorkerクラスは,javax.swing.SwingWorkerのサブクラスで,マンデルブロ集合を求める計算を行うクラスです。SwingWorkerクラスのサブクラスということからもわかるように,この処理はSwingのイベントディスパッチスレッドとは別スレッドで行っています。

最後のPointクラスは複素平面を表すクラスです。

このサンプルを実行して,[Start]ボタンをクリックすると,図1のような図が描画されます。

しかし,実際に実行してみればわかるのですが,描画がとても遅いのです。そこで,処理速度のパフォーマンスチューニングを行っていきましょう。

図1●Mandelbrotの実行結果
図1●Mandelbrotの実行結果
[画像のクリックで拡大表示]