Gibt es ein llvm-Java-Frontend, das Java-Quellen in die Zwischenform von llvm konvertiert?

Lesezeit: 3 Minuten

Nach dem, was ich gelesen habe, gibt es ein llvm-Programm, das Java-Bytecode in die Zwischenform von llvm namens class2llvm konvertiert. Meine Frage ist, wie greife ich darauf zu. Welches Frontend muss ich installieren, um darauf zugreifen zu können?

VMkit ist ihre Implementierung einer JVM, aber ich suche, wie man den Java-Quellcode mit llvm kompiliert, nicht, wie man ihn ausführt.

  • Sie verstehen, dass Sie verwenden können javac (der Standard-Java-Compiler), um dies zu tun? Sie brauchen nichts von llvm – Sie können einfach das Orakel-jdk installieren (und ich stelle mir vor, dass Sie so Java-Dateien für class2llvm vorbereiten sollen, aber das ist nur eine Vermutung)

    – Andreas Koch

    29. Mai 2012 um 18:09 Uhr

  • @andrewcooke- Tut es javac wirklich LLVM-Bytecode ausgeben? Kannst du einen Link geben, wie man das macht?

    – Vorlagentypdef

    29. Mai 2012 um 18:11 Uhr

  • Basierend auf dem, was ich gerade über VMkit gelesen habe, unterstützt es die vorzeitige Kompilierung. Ist das nicht im Wesentlichen das, was Sie brauchen?

    Benutzer377628

    29. Mai 2012 um 18:14 Uhr

  • vielleicht verstehe ich nicht. Javac geht von der Java-Quelle zum Bytecode. dann wechselt class2llvm von Bytecode zu llvm. Das bringt Sie von Java Source zu llvm. willst du das nicht?

    – Andreas Koch

    29. Mai 2012 um 18:22 Uhr

  • ah, ok, ich glaube, ich verstehe, was alle verwirrt hat. Als ich sagte “Sie brauchen nichts von llvm”, wollte ich von der Quelle zum Bytecode gehen (nicht von der Quelle zu llvm). Verzeihung.

    – Andreas Koch

    29. Mai 2012 um 18:56 Uhr

Das Java-Frontend übersetzt Java-Bytecode (.class-Dateien) in LLVM-Bytecode. Schau dir mal diesen Link an:

https://llvm.org/svn/llvm-project/java/trunk/docs/java-frontend.txt

  • Dieses Java-Frontend ist noch nicht fertig, siehe stackoverflow.com/questions/60580188/…

    – Alexej Stepanow

    10. März 2020 um 14:45 Uhr

  • Der Link ist tot @Ashkan

    – Niton

    1. September 2021 um 12:34 Uhr

Benutzer-Avatar
lei_z

Kannst du dir mal anschauen Drachenei, wodurch llvm die Frontends von gcc verwenden kann. Da gcc bereits ein Frontend für Java hat, genannt gcj, vielleicht kann llvm es verwenden, um Java-Code zu kompilieren. Ich bin mir jedoch nicht sicher, wie gut llvm mit dem gcc-Frontend interagiert, daher funktioniert dies möglicherweise nicht.

  • “Ab GCC 7 wurden das GCC-Java-Frontend und die zugehörige libjava-Laufzeitbibliothek aus GCC entfernt.” Quelle: gcc.gnu.org/wiki/GCJ

    – Benutzer

    24. Januar 2021 um 13:59 Uhr

Benutzer-Avatar
Aschkan

Ich habe eine Java-Klasse mit vmkit ausgeführt ( http://vmkit.llvm.org/ ) basierend auf LLVM. Es verwendet LLVM zum Kompilieren und Optimieren von Hochsprachen für Maschinencode. J3 ist eine Implementierung einer JVM mit VMKit.

  • Die Frage fragt nach einer Konvertierung von Quellcodenicht Bytecode.

    – Martin Schröder

    7. Januar 2015 um 15:36 Uhr

Benutzer-Avatar
erw

[NOTE: From November 2015 it is no longer open source, so this hack is mostly useless.]

RoboVM könnte die Lösung werden, nach der Sie suchen. Es ist Open Source und kompiliert JVM-Bytecode (.class-Dateien) in Maschinencode.

Ich nehme an, sie tun es mit so etwas wie class2llvm.

Leider ist es noch in der Alpha. Ich habe es gerade auf HelloWorld.java getestet. Es gab eine 5-fache Beschleunigung der Ladezeit auf einem einzelnen Kern. (Der größte Teil der Laufzeit ist Ladezeit.)

echo Hello World! : <1 ms : 31K (/usr/bin/echo binär)

java HelloWorld : ~70 ms : 0.4K (HelloWorld.class JVM-Bytecode)

./HelloWorld : ~13 ms : 9.4MB (9,3 MB Binärdatei + 57 KB robovm-rt.jar)

Beachten Sie, dass Java eine 32 MB große $JAVA_HOME/lib/rt.jar-Datei (und vielleicht mehr) aufruft. Das Suchen in einer so großen Datei muss ein Grund dafür sein, dass Java so langsam geladen wird. Wenn RoboVM intelligenter wird, kann es vielleicht den größten Teil der 9,3-MB-Binärdatei für ein noch schnelleres Laden wegwerfen?

Die Website erwähnt iOS, aber ich denke, das liegt daran, dass sie ihre Add-On-UI-Bibliotheken verkaufen. RoboVM wurde für mich auf einem Ubuntu-Geschmack gut kompiliert. Stellen Sie einfach sicher, dass Sie dies tun

$ sudo apt-get install g++-multilib

zuerst (und vielleicht libpthread-stubs0-dev und libpthread-workqueue0 installieren … weiß nicht, ob sie eine Rolle spielten).

1106210cookie-checkGibt es ein llvm-Java-Frontend, das Java-Quellen in die Zwischenform von llvm konvertiert?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy