Javaのデベロッパにとってバーチャルマシーンの概念は何も新しい事ではないが、AVM2には一見する価値のある機能がたくさんあるのだ。Per Olesen氏はStrong Typing、Method Closures、Just-in-Time(JIT)コンパイラとGarbage Collectionを含むAVM2の重要な機能(source)に関して議論しているブログを掲載した。
タイプ情報
AS3はストロングタイピングをサポートし、Olesen氏は下記のように論じている。
AS3に先立って全てのタイプ情報はコンパイルされる時点でコードからはがされていました。ランタイム時では全ては単なる動的にタイプされた分子であったのです。AS3ではタイプ情報をランタイムに全て持ってこれるのです。メソッドクロージャ
明確にタイプされた変数を使用するとパフォーマンスが向上し、またメモリの消費量を削減できるのです。
AS3はメソッドクロージャをサポートする。Olesen氏は下記のように説明している。
AS3においてはメソッドクロージャがありますが、またそれは機能が内部で作られたその環境を保つ一方(定義された当時の”これ”は未だ以前の”これ”を 意味しているのです。)、機能である変数をつくることができ、またそれを受け回すことができるという事を意味しているのです。Gary Grossman氏とEmmy Huang氏の記事'Action Script 3.0 Overview'(source)の中で、彼らはメソッドクロージャのキーとなる使用法を説明している。
イベントハンドリングはメソッドクロージャのおかげでActionScript 3.0内で簡易化され、またビルトインイベントデリゲーションを提供する。ジャストインタイム(JIT)コンパイラ
myButton.addEventListener("click", someMethod);
JITコンパイルはバイトコードがパフォーマンスを証明するためにネイティブマシーンに変換されるテクニックである。Adobeの記事'ActionScript Virtual Machine 2(AVM2) Overview(source)は、開発に及ぼされる影響に関して詳細を記している。
実際にAVM2はJITの方法でランタイム時にコードを変換するかもしれないが、これは実行の意味には影響せずそのパフォーマンスにのみ影響する。Olesen氏はデベロッパに影響を与えるものは考慮する必要があることを記している。
AVM2内のJITで一つ気付くことがあります。コンストラクタはJITされていませんので、もしあなたがパフォーマンス集中コードをクラス内に所有していたらそれをコンストラクタ外に持っていってください。ガベージ・コレクション
Olesen氏はAVM2におけるガベージ・コレクションを高く評価している。
メモリマネジメントとガベージ・コレクションは別のMMgcプロジェクト内に見うけられます。これは増加、保守的なマーク・スウィープと統合されたDeferred Reference Counting(DRC)メカニズムなのである。もちろんガベージ・コレクション実装は短時間(30ミリ秒)で、最善のクライアントパフォーマンス用に調整されて いる。更なるリソースを探している人たちはFarata SystemsのJava5とActionScript3 間の言語シンタックスを比較した詳細なブログエントリ(source)を見て欲しい。またMozilla Tamarin Project(source)をレビューするとAVM2上にて、更なる情報を得ることができる。TamarinはFlash Player 9とAIRプラットフォーム内で使用されているAVM2実装である。更にはAdobeはJavaデベロッパたちに向けたコミュニティFlexサイトを提供 している。http://flex.org/java/.
Javaデベロッパたちにとって学習プロセスを緩和するような、ActionScriptシンタックスとバーチャルマシーンアーキテクチャにおいてたくさんの類似点があるのだ。
原文はこちらです:http://www.infoq.com/news/2007/11/understanding-actionscript-vm