Java中的运行时编译

Java中的运行时编译,java,Java,我已经开始将我的服务器端C#应用程序移植到Java。它所做的事情之一是使用CodeDOM框架动态生成代码,将其编译为字节码,并在运行时加载类。还有一些场景,我们使用表达式树来轻量级地动态生成方法 我做了一些研究,我相信我最接近的是Javaassist。如果有其他支持动态代码生成和编译的框架,我将不胜感激。我是Java世界的新成员。我会看看针对jvm的lisp(或其他动态语言)。 有Java编译API(例如,) 如果您只需要评估表达式,可以考虑任何EL,例如OGNL或MVEL。 Groovy、JR

我已经开始将我的服务器端C#应用程序移植到Java。它所做的事情之一是使用CodeDOM框架动态生成代码,将其编译为字节码,并在运行时加载类。还有一些场景,我们使用表达式树来轻量级地动态生成方法

我做了一些研究,我相信我最接近的是Javaassist。如果有其他支持动态代码生成和编译的框架,我将不胜感激。我是Java世界的新成员。

我会看看针对jvm的lisp(或其他动态语言)。
有Java编译API(例如,)

如果您只需要评估表达式,可以考虑任何EL,例如OGNL或MVEL。


Groovy、JRuby和Scala是最主流的动态语言,它们提供了大量的选项,从简单的表达式计算到全面的Java交互。

要修改类,可以使用JavaAssist、asm、cglib(实际上,它取决于asm)、bcel等。 其中,我推荐asm,因为它更轻,性能更好

使用asm,您可以动态生成一些类。但是,如果您想要修改在jvm中运行的类,则必须使用Java工具API来重新转换现有的类

有关更多信息,请参阅本文

更多关于oracle仪器的文档。

我已成功用于动态代码生成。与Javassist一样,它可以在内存中编译Java源代码。与Javassist一样,它缺少Java1.5语言特性,但除此之外,它还易于使用

这门课是一个很好的起点