2011年3月8日火曜日

画像をぷるぷる揺らして、Javaの『遅さ』を計測する

このエントリーをはてなブックマークに追加
Pocket

先週に作った画像をぷるぷる揺らすツールだが、フレームレートを取る事ができるのでJavaのJVMの立ち上がりの遅さの再確認をしてみたので、結果を公開したい。

コッホ曲線で計測したJavaの『遅さ』の再確認となるが、今回は何秒目までが遅いかと言う、体感に関わる部分を数値化する。

1. ベンチマーク・ソフト

今回のベンチマークで使ったアプリケーション Knocking Bird は、以下のように写真の任意の場所を揺らすものだ。これはVectorで公開中なので、誰でもダウンロード・実行する事ができ、ソースコードもBitBucketで開示している。

このアプリケーションのテクニカルな特性は、「写真の一部をぷるんと揺らすミニアプリの構造」と「マルチコア時代のパフォーマンス・チューニング」にまとめてあるが、マルチコアなプロセッサでも性能が発揮できるように工夫をしてある。

2. ベンチマーク方法

このアプリで、1秒ごとに更新されるフレームレートを10秒間計測するベンチマークを5回行った。なお、Java 1.6.0_24を-clientモードで動かしており、アプリケーションはあらかじめ起動した状態にしておいた。

ベンチマーク時の映像は以下のようになり、揺らす範囲を10箇所指定し、ノーウェイトで描画を繰り返している。なおフレームレートが安定しないためか、動画ではカクカクした動きになっているが、実際はもう少し滑らかだ。

3. ベンチマーク結果

ベンチマーク結果は以下の通り。

チェックボックスにチェックを入れて、画像を揺らしはじめてから4~5秒でフレームレートが50超で安定するが、1秒目は15fps前後、2秒目は36fps前後、3秒目は41fps前後、4秒目は47fpsとなっており、Java/Hotspotの立ち上がりの遅さが明確に現われている。

4. Javaの遅さは体感できる

前回のベンチマークで、「立ち上がりの遅さは体感という点では結構致命的。」というコメントを頂いたのだが、前回のベンチマークでは時間的な概念を入れていなかったので、今回は何秒目で速度が安定するかを計測したが、5秒目となり十分体感できる事が確認された。

5. Javaでデスクトップ・アプリケーションを書くときは注意が必要

上述の特性のみを取り上げてJavaアプリケーションが駄目とは言い切れないが、C/C++アプリケーションに対しての弱点の一つである事は確かだ。ウェブ・アプリケーションは常時稼動しているので問題にならないが、規模が大きなデスクトップ・アプリケーションの設計・開発を行うときは、この特性が目立たないように工夫をする必要があるであろう。

6. モバイルとAndroidのJavaには、この問題はない

ケータイ・アプリのJavaはJITでは無いので上述の問題はなく、AndroidのDalvik VMのJITはレスポンス重視最適化のレベルを抑えているので、起動後何秒も処理速度が遅いと言う事は無いと考えられる。心配するのはデスクトップ・アプリケーションを書くときだけで十分だ。

3 コメント:

canrun9918 さんのコメント...

uncorrelatedさん、はじめまして
今更ですが10年も前の記事を読ませて頂きました。
当時はKnocking BirdのソースコードをBitBucketで開示しておられたようですが、現在そちらのPageへアクセスしてもソースコードは見つけられず、GithubやInternet Archiveでも探してみましたがソースコードを見つけることが出来ませんでした。
今後にもしKnocking Birdのソースコードを再び開示するようなことがありましたらブログの方で告知して頂けると幸いです。
大変とお手数をお掛けいたしますが、どうか宜しくお願いを致します。

uncorrelated さんのコメント...

>> canrun9918 さん

BitBucketが分散バージョン管理システムのMercurialのサポートを辞めたときに公開終了になってしまっていたのですが、とりあえず以下でリポジトリ交換しておきました。

http://dvcs.anlyznews.com/op/KnockingBird/

canrun9918 さんのコメント...

uncorrelatedさん
迅速かつ丁寧な対応、ありがとうございます。
10年の前のjavaでしかもjavaFXを使わずに静止画像をどのようにしてこのような滑らかな動きを実現させているのか?
大変と興味を持ちましてこの度はコメントをさせて頂きました。
まさかこんな迅速に対応していただけるとは思っても居ませんでしたので本当に感謝です。
Knocking Birdのソースコードを見て色々と勉強させて頂きたいと思います。
本当にありがとうございました。

コメントを投稿