当前位置: 首页 > 面试题库 >

哪个库/程序可用于生成Java字节码?

邹齐智
2023-03-14
问题内容

我知道BCEL,但是这个项目似乎已经死了,因为它两年没有发布了。Java世界在继续发展。例如,JDK
1.6具有新的类文件格式。

因此,可以使用什么库为JVM创建字节码。如果没有库,那么程序也可以,如果我可以详细操作生成的代码,例如字节码汇编程序。

您可以推荐哪种软件?容易使用吗?有好的例子/教程

编辑:对于所有询问:是的,javac很好。但是对于在运行时生成某些类,直接访问字节码的路径会更干净。


问题答案:

ASM

http://asm.objectweb.org/

它比BCEL快得多,并且支持泛型和注释。关于其体系结构的一点是:为了确保高性能,ASM是围绕引发事件的解析器构建的(与解析器构建数据结构的BCEL相反)。这有点类似于SAX和DOM解析器之间的区别。需要一些练习才能习惯这种思维。

编辑(遵循McDowell的评论):确实,访问者在ASM中使用率很高,但它比普通访问者要多:解析器懒惰地构建了访问的数据结构,因此,如果您对类文件的某些部分不感兴趣(例如,如果您想知道方法的名称,但不必关心它们的主体),则可以从visitMethod()方法返回null。这将使解析器跳过方法主体部分,从而防止完全描述该方法的对象网的(昂贵)构造。



 类似资料:
  • 需要向数据库中添加一个字段,该字段将记录与该(外部)id相关的序列号。 我需要添加一个序列列,为每个帐户分别递增,实现: 请注意,顺序与帐户相关。

  • 问题内容: 我们正在编写从 Pascal* 到 JVM Bytecode的 某种 编译器 。而且我们已经实现了表达式树的生成,因此下一步应该是创建文件。您能否提出有关至少如何从某些静态数据生成任何文件的任何指南/教程?因为我已经搜索了2个小时并且已经阅读了JVM规范,但是我确实需要一些甚至最简单的示例来开始开发整个程序。 *** 问题答案: 实际上,您下载的ASM文件夹中有一个示例文件。它称为 H

  • 我正在开发一个Java的Web应用程序,它需要将上传的文件存储在一个目录中,并将嵌入式Neo4j数据库存储在另一个目录中。我正在将warfile部署到Tomcat以服务于应用程序,并且应用程序需要在Linux或Windows中的Tomcat下运行。 我应该把这两个目录放在主机系统的文件系统的什么位置? 我很困惑,因为我习惯于将信息存储在通过URL等指定的数据库中。感谢您的帮助。

  • 问题内容: 诸如Rails和Django之类的Web框架内置了对“子弹”的支持,“子弹”用于生成可读且对SEO友好的URL: Rails中的子弹 团状串典型地只包含的字符,并且可因此在不URL转义(认为“富%20巴”)编写的。 我在寻找一个Java蛞蝓函数给出任何有效的Unicode字符串将返回蛞蝓表示(,和)。 一个普通的子弹函数可能类似于: 但是,此实现无法处理国际化和重音符号(> )。解决此

  • 问题内容: 我需要可视化大型矢量图形。这是道路地图,道路只是线。有图书馆吗?如果该库支持放大/缩小并且易于扩展,那就太好了。例如,实施道路选择或一些不错的鼠标悬停效果。该许可证应允许在商业项目中使用。 谢谢菲利普 编辑:是否有理由不使用Graphics2D或SWT Graphics?(该项目在SWT上,不涉及任何SVG。) 问题答案: 看看Apache Batik Batik是基于Java的工具包