我知道BCEL,但这个项目似乎已经死了,因为它已经两年没有发布了.Java世界继续前进.例如,JDK 1.6具有新的类文件格式.
那么什么库可以用来为JVM创建字节码.如果没有库,程序也可以,如果我可以详细操作生成的代码,例如字节码 - 汇编程序.
你能推荐哪种软件?是否容易使用?有很好的例子/教程?
编辑:所有问:是的,javac很好.但是为了在运行时生成一些类,直接到字节码的路径会更清晰.
ASM
http://asm.objectweb.org/
它比BCEL快得多,并支持泛型和注释.关于其体系结构的一点:为了确保高性能,ASM围绕抛出事件的解析器构建(与解析器构建数据结构的BCEL相反).这有点类似于SAX和DOM解析器之间的区别.需要一些练习才能适应这种想法.
编辑(遵循McDowell的评论):确实访问者在ASM中被大量使用,但它不仅仅是普通的访问者:访问的数据结构由解析器懒惰地构建,所以如果你对类文件的某些部分不感兴趣(例如,你想知道方法的名称,但你不关心它们的主体),你可以从visitMethod()方法返回一个null.这将使解析器跳过方法主体部分,从而防止(昂贵的)构造完全描述该方法的对象网.