すべて
Macromedia Flash Player 8 に施されたパフォーマンス強化は、アルファビデオのサポートやドロップシャドウフィルタエフェクトほど目立つ新機能ではないものの、何もせずに今すぐ利用できるという点で特筆に値します。今回のパフォーマンス強化に大きく貢献したのは、ActionScript の処理効率を強化しつつプレーヤーの消費メモリ量の削減を実現する、新たなガベッジコレクション手法です。
また、Macintosh プラットフォーム用 Flash Player 8 に施した改良により、Windows と Macintosh のパフォーマンス差がさらに近付きました。これらの改良点を総合すると、Flash Player 8 でコンテンツ / アプリケーションを閲覧した場合はパフォーマンスが約 5 割も向上するケースが見られます。
ActionScript の実行速度強化とメモリ消費量削減の一番の原動力となっているのが、Flash Player 8 の新たなガベッジコレクタです。Flash アプリケーションの規模と複雑さが増大するにつれ、Flash Player 7 のガベッジコレクタが利用するリファレンスカウントアルゴリズムは、その能力の限界に達し始めていました。そこで最新のプレーヤーでは、単なるリファレンスカウントから分散型のリファレンスカウントに移行することで、Flash Player のリファレンスカウント量を約 9 割削減することに成功しています。
Flash Player 7 のリファレンスカウントがもたらすオーバーヘッドは総処理時間の約 2 割にも達し、大規模アプリケーションの表示処理が一時中断されるような結果を招いていました。新しいガベッジコレクタは、このオーバーヘッドを総処理の約 1 ~ 2% にまで削減します。
また、Flash Player 8 は、まず不要オブジェクトに印を付け、別のステップで実際の削除処理を行う、漸次型のガベッジコレクションを採用しています。これにより、削除処理は処理のないサイクルが発生した時点で行われるようになります。
効率良いガベッジコレクションは、メモリ消費量の能率化にも直結しています。したがって、Flash Player 8 のメモリ消費量は Flash Player 7 の約 50% で済みます。Flash Player 7 のガベッジコレクション手法は、常にほぼ一定のメモリ消費を必要としていましたが、漸次型のガベッジコレクションを採用する Flash Player 8 の場合、処理のないサイクルが発生するごとにまとまったメモリ領域が解放されるので、メモリが固まりで消費される傾向にあります (図 1 参照)。
図 1. サンプルテスト実行時の Windows メモリ消費状況を示すグラフ
同じテストを Mac OS X 上で実行した場合、ガベッジコレクションの動作はやや異なり、Flash Player は主に実行処理の最後にメモリを解放する傾向にあります 図 2 参照 。
図 2. サンプルテスト実行時の Mac OS メモリ消費状況を示すグラフ
新しいガベッジコレクタとメモリ消費量の削減が効果を発揮し、既存コンテンツの大半は Flash Player 8 で実行することで、再コンパイルの必要なくスピードアップできます。
新しいガベッジコレクタは、コンテンツやアプリケーションの全体的なパフォーマンスを向上させることができますが、特定のエリアに対しては、逆にパフォーマンスに悪影響を及ぼす場合もあります。つまり、Flash Player 7 と比較した場合、処理の内容によっては Flash Player 8 の方が早くなるものと、遅くなるものの両方があります。これはメモリ消費の管理方法が変更されていることに起因しています。この結果、旧バージョンと Flash Player 8 を比較する場合、マイクロベンチマークテストや単に特定機能のパフォーマンスだけを測定する小規模ベンチマークテストは役に立たないと言えます。
例えば、ある公式の解を求める数学的なルーティンを処理するマイクロベンチマークテストがあり、これをプレーヤーで 5 回連続して実行したとします。仮に Flash Player 7 が一回目のテストを 300 ミリセカンドで完了できたとしたら、 その後の各回の実行結果も 300 ミリセカンドになります。新しいガベッジコレクションを採用する Flash Player 8 の場合、一度目の実行に 310 ミリセカンド、そして、次回は 300 ミリセカンドというようになることがあります。一度目の実行は Flash Player 7 の方がより短期間で処理できたとしても、その後の実行がより高速に処理されることから、総合的には Flash Player 7 より Flash Player 8 の方が平均的な処理速度が高速になります。
この記事の最後に収録している Flash Player マイクロベンチマークテスト結果のサンプルを一度ご覧ください。ここでは、アプリケーションの総合的なパフォーマンスを強化することが重要であり、必ずしも個別のマイクロベンチマークに囚われないことに注意が必要です。もちろん、マイクロベンチマークテストは我々が仕様変更に伴う悪影響の有無を確認する上で重要です。しかし、ここで注意しなければならないのは、今回リファレンスアプリケーションのベンチマークをテストの一貫として含めることで、総合的なパフォーマンスの影響を確認するための、より包括的なテストを作成している点です。
今回のリリースでは、Mac のプレーヤーパフォーマンス強化に多大な時間と労力をつぎ込み、動作の安定とともに、Windows と Mac OS 間のパフォーマンス差を解消することに重点を置きました。なかでも、Mac 用プラグインが OS X の新しい「Mach-O」ランタイムアーキテクチャを利用するように開発し直し、Flash Player が Mac プラットフォームの最新テクノロジーや機能を利用するようにした点が特筆に値します。また、Mac に特化した改善としてレンダリングルーティンの中核部分を最適化することにも、多大な時間を費やしました。
ビデオや大規模コンテンツの再生パフォーマンス強化と CPU 使用量削減のために、Flash Player 8 は、Mac OS X 10.2 以降の Safari 上で実行される際に OpenGL の一部の機能を利用します。プレーヤーは OpenGL をフルサポートするわけではありませんが、画面にパーツをより高速に表示させるために、特定の OpenGL 機能を利用します。OpenGL を利用することにより、ビデオやアニメーションの再生が改善されるとともに、横方向の再描画線の表示頻度が減少します。
この改良機能は Safari 上での表示の全体的なパフォーマンス強化に貢献しますが、ガベッジコレクションの仕様変更同様に、一部のケースでは逆にパフォーマンスが悪化する場面もあり得ます。OpenGL には、それ自体にいくつかの制限があり、古い 遅い システム上では Mac OS X がフレームレートを毎秒 30 フレームに制限します。今回のパフォーマンス改善が Safari に限定されている点が気になる方もおられることでしょう。これは、今回の機能の必須条件として、ブラウザがユーザーの指示による新規タブの作成やタブの切り替えを、プレーヤーに通知できる必要があったからです。今回のリリース時点では、この機能をサポートする Mac 用ブラウザは Safari に限定されていました。
以下の Flash Player サンプルマイクロベンチマークテストとその結果は、Macromedia がプレーヤーの開発にあたり、どのようなパフォーマンス検証を行っているかを示すものです。
Flash Player サンプルマイクロベンチマークテストとその結果
もちろん、この記事で紹介した事柄だけが最新プレーヤーのパフォーマンス改善点ではありません。他にも、メモリ消費量を減らすための内部データ構造に対する変更や、表示精度を上げるための浮動小数点行列の使用といった、目立たないところでの仕様変更や最適化も施されています。改善点によっては、特定の機能を高速化するものや、新たな機能性をサポートするためにパフォーマンスが犠牲になっているものもあります。しかし、Flash Player 8 に対するパフォーマンス強化と最適化の効果を総合すると、コンテンツやアプリケーションがよりスムーズに、しかも、より高速に表示されるようになっています。
Flash Player に関するさらに詳しい情報については、Flash Player デベロッパーセンターをご覧ください。
Flash Player 8 の詳細については、Flash Player の搭載機能ページをご覧ください。