簡體   English   中英

Java運行時編譯

[英]Runtime compilation in Java

我已經開始將服務器端C#應用程序移植到Java。 它要做的一件事是使用CodeDOM框架動態生成代碼,將其編譯為字節碼,然后在運行時加載類。 在某些情況下,我們使用表達式樹進行輕量級的方法動態生成。

我做了一些研究,我相信最接近我的是Javaassist。 如果有其他支持動態代碼生成和編譯的框架,我將不勝感激。 我是Java世界的新手。

有Java編譯API(例如, http://www.accordess.com/wpblog/an-overview-of-java-compilation-api-jsr-199/ )。

如果只需要評估表達式,請考慮任何EL,例如OGNL或MVEL。

Groovy,JRuby和Scala是最主流的動態語言,它們提供了從簡單的表達式求值到全面的Java交互的多種選擇。

要修改類,可以使用javaassit,asm,cglib(實際上取決於asm),bcel等。其中,我建議使用asm,因為它具有更好的輕量級和更好的性能。

使用asm,可以動態生成一些類。 但是,如果要修改在jvm中運行的類,則必須使用Java Instrument API重新轉換現有的類。

您可以查看本文以獲取更多信息。 http://www.cs.helsinki.fi/u/pohjalai/k05/okk/seminar/Aarniala-instrumenting.pdf

來自oracle的有關Instrument的更多文檔。 http://docs.oracle.com/javase/6/docs/technotes/guides/instrumentation/index.html

我已經成功地使用Janino進行了動態代碼生成。 像Javassist一樣,它可以在內存中編譯Java源代碼。 也像Javassist一樣,它缺少Java 1.5語言功能,但除此之外,它易於使用。

SimpleCompiler類是一個很好的起點。

我將研究針對jvm的lisp(或其他動態語言)。 維基文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM