1

CGLIBは、プロキシメカニズムを実現するために使用される非常に人気のある実装です。特定のクラスをプロキシするために、CGLIBはそのサブクラスのメモリ内実装を作成するのか、それとも物理バイトコードを作成してからそのクラスをインスタンス化するのかを知りたいのですが。

それがメモリ実装で作成する場合、それがそうしている間にどれだけのオーバーヘッドをもたらすか。CGLIBのドキュメントでこの詳細を見つけようとしましたが、指定されていないか、スキップした可能性があります。

javaassistライブラリについても同じ質問をすることができます。

4

1 に答える 1

1

まず第一に、cglib は互いに完全に独立したまったく異なるクラスを提供します。

ただし、私の知る限り、今日の時点で、cglib は ASM を使用してクラスのバイト コードを読み取り、ASM ClassVisitor などによって「オンザフライ」で操作することにより、メモリ内にクラスを作成します。つまり、cglib は ASM のビジターを使用します。 API であり、よりメモリを集中的に使用するツリー API ではありません。結果のクラスは直接ロードされます。これは、バイト インストルメンテーションでどれだけ速くなるかということです。

基本的に、cglib は ASM が実行できるすべてのことを実行できます。ASM は十分に文書化されています: http://download.forge.objectweb.org/asm/asm4-guide.pdf

興味があれば、ここに cglib の概要を書きました: http://mydailyjava.blogspot.no/2013/11/cglib-missing-manual.html

于 2013-11-13T22:48:39.620 に答える