Proxy cglib是否在内存中创建字节码或物理类来实现代理?

Proxy cglib是否在内存中创建字节码或物理类来实现代理?,proxy,instrumentation,cglib,Proxy,Instrumentation,Cglib,CGLIB是用于实现代理机制的非常流行的实现。我很想知道,代理一个特定的类CGLIB会创建其子类的内存实现,还是创建物理字节码然后实例化该类 如果它创建了内存内实现,那么这样做会带来多少开销。我试图在CGLIB文档中找到这个细节,但它没有指定,或者我可能已经跳过了 对于javaassist库可能会问同样的问题。首先,cglib提供了完全独立的不同类 然而,据我所知,到目前为止,cglib通过使用ASM读取类的字节码并由ASM类访问者“动态”操作来在内存中创建类。也就是说,cglib使用ASM的访

CGLIB是用于实现代理机制的非常流行的实现。我很想知道,代理一个特定的类CGLIB会创建其子类的内存实现,还是创建物理字节码然后实例化该类

如果它创建了内存内实现,那么这样做会带来多少开销。我试图在CGLIB文档中找到这个细节,但它没有指定,或者我可能已经跳过了


对于javaassist库可能会问同样的问题。

首先,cglib提供了完全独立的不同类

然而,据我所知,到目前为止,cglib通过使用ASM读取类的字节码并由ASM类访问者“动态”操作来在内存中创建类。也就是说,cglib使用ASM的访问者API,而不是其内存密集型树API。然后直接加载生成的类。这是关于字节检测的速度

基本上,cglib可以做ASM可以做的一切。ASM有很好的文档记录:


如果您感兴趣,我在这里写了一篇关于cglib的总结:

首先,cglib提供了完全独立的不同类

然而,据我所知,到目前为止,cglib通过使用ASM读取类的字节码并由ASM类访问者“动态”操作来在内存中创建类。也就是说,cglib使用ASM的访问者API,而不是其内存密集型树API。然后直接加载生成的类。这是关于字节检测的速度

基本上,cglib可以做ASM可以做的一切。ASM有很好的文档记录:

如果您感兴趣,我在这里写了一篇关于cglib的总结: