[英]Compiler to translate Java bytecode to platform-independent C code before runtime?
我正在尋找一個編譯器,在運行時(Ahead-of-Time編譯)之前將Java字節碼轉換為與平台無關的C代碼。
然后,我應該能夠使用標准C編譯器將C代碼編譯為目標平台的可執行文件。 我知道這種方法僅適用於不經常修改的某些Java應用程序。
那么Java-to-C編譯器可用?
我可以建議一個名為JCGO的工具,它是C語言翻譯器的Java源代碼。 如果需要轉換字節碼,則可以通過某種工具(例如,JadRetro + Jad)對類文件進行反編譯,並將源文件傳遞給JCGO。 該工具一次翻譯java程序的所有類,並生成C文件(每個類一個.c和.h),可以進一步編譯(通過第三方工具)為高度優化的本機代碼。目標平台。 Java泛型尚不支持。 支持AWT / Swing和SWT。
為什么這樣? Java虛擬機包括運行時Java到程序集編譯器。
運行時編譯可以產生更好的性能,因為有關運行時值的所有信息都可用。 雖然提前編譯必須對運行時值進行假設,因此可能會發出較少的代碼。 有關詳細信息,請參閱Cliff Click的Java vs C性能 。
https://github.com/badlogic/jack - Java到C ++的轉換器,忽略內存模型和其他東西,使用Boehm GC進行額外的緩慢和GC暫停
許可證對我來說不清楚。
http://ptolemy.eecs.berkeley.edu/publications/papers/03/java-2-C/ - 針對嵌入式系統的可重定向優化Java-to-C編譯器
一篇論文,不確定該程序是否可用。
(我一直在谷歌搜索這些東西,這就是我在SO處提出的這個問題。)
這不是我自己問題的答案,但Oracle是如何做到的?
http://download.oracle.com/docs/cd/B28359_01/java.111/b31225/chone.htm#BABCIHGA
曾經有一種名為TowerJ的產品,它本質上是Java的“via C”靜態編譯器,但它早已不復存在。
有人告訴我,Sun Labs已經創建了這樣的東西,作為Sun SPOT項目的一部分,但我不確定它是否公開。
@BobMcGee:在你提到的基准測試中,GCJ確實輸了,但Excelsior JET(32位AOT編譯器)在所有三個測試系統上擊敗了32位HotSpot ,所以我不確定你的觀點是什么。
但是,畢竟有謊言,該死的謊言和基准 。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.