ASM is a Java bytecode manipulation framework. It can be
used to dynamically generate stub classes or other proxy
classes, directly in binary form, or to dynamically modify
classes at load time, i.e., just before they are loaded into
the Java Virtual Machine.
ASM offers similar functionalities as BCEL or SERP, but is
much smaller (33KB instead of 350KB for BCEL and 150KB for
SERP) and faster than these tools (the overhead of a load
time class transformation is of the order of 60% with ASM,
700% or more with BCEL, and 1100% or more with SERP). Indeed
ASM was designed to be used in a dynamic way* and was
therefore designed and implemented to be as small and
as fast as possible.
(* ASM can of course be used in a static way too.)