N2 ToolBox(跡地)

跡地です。引っ越しました。http://d.hatena.ne.jp/nosen

ASM

2004-06-10 04:04:51 | その他
今日も最近あちこちで使われているオープンソースソフトウェアをとりあげます。
今日紹介するのは、ASMといライブラリです。ASMはバイトコードを動的に生成して、クラスファイルを読み込み時に変更したりする目的で使われます。
同じ様な機能をもつライブラリにBCELやSERPがありますが、ASMのWebサイトでは、ASMはこれらより、サイズが小さく、かつ速いと主張されています。
たしかにASMのコアは14クラスしかなくて、jarファイルはたったの25Kです。これに対して、BCELは350K,SERPは150Kだそうです。
スピードに関しては、クラスをロード時のオーバーヘッドがASMの場合は+60%なのにたいして、BCELは700%以上、SERPは1100%以上だ、ということです。
こんなにパフォーマンスが違うのはASMはBCELとかとはバイトコード変換の方式が全然違うからです。
BCEL等はJavaのクラスファイルのツリー構造をそのまま表現するオブジェクトを生成し、それを操作するというアプローチをとっていますが、これはツリー構造を表現するために多くのクラスを必要とする(=ライブラリのサイズが大きくなる)し、オブジェクト生成のコストも高くつきます。
これに対してASMはVisitorパターンを採用することによってこの問題を回避しています。詳しい事はASMのドキュメントに記述されています。とても興味深い内容なので、後日詳しく紹介できたらいいなと思います。

最近クラスの読み込み時にバイトコードを動的に変更するということが普通に行われるようになりつつあり、JDK1.5ではjava.lang.instrumentパッケージによってクラスファイルを読み込み時に変更するためのインターフェースが標準化されてしまっていたりします。
と、いうようなことがあってこの手の技術には注目しています。

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy