Is there a llvm java front end that converts java source to llvm's intermediate form?

JavaLlvmBytecode

Java Problem Overview


From what I've read, there is a llvm program that converts java bytecode to llvm's intermediate form called class2llvm. My question is, how do I access this. What front end do I have to install in order to access this.

VMkit is their implementation of a JVM, but I am looking for how to compile the java source code with llvm, not how to run it.

Java Solutions


Solution 1 - Java

The Java frontend translates Java bytecode (.class files) into LLVM bytecode. Take a look at this link:

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

Solution 2 - Java

You may take a look at dragonegg, which enables llvm to use gcc's frontends. As gcc already has a frontend for java, called gcj, perhaps llvm can use it to compile java code. But I'm not sure how well llvm interfaces with the gcc frontend, so this may not work.

Solution 3 - Java

I have executed a java class using vmkit ( http://vmkit.llvm.org/ ) based on LLVM. It uses LLVM for compiling and optimizing high-level languages to machine code. J3 is an implementation of a JVM with VMKit.

Solution 4 - Java

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

RoboVM might become the solution you're looking for. It's open source and compiles JVM bytecode (.class files) to machine code.

I assume they do it using something like class2llvm.

Unfortunately, it's still in alpha. I just tested it on HelloWorld.java. It gave 5x speed up of load time running on a single core. (Most of the run time is load time.)

> echo Hello World! : <1 ms : 31K (/usr/bin/echo binary) > > java HelloWorld : ~70 ms : 0.4K (HelloWorld.class JVM bytecode) > > ./HelloWorld : ~13 ms : 9.4MB (9.3MB binary + 57K robovm-rt.jar)

Note that java calls a 32MB $JAVA_HOME/lib/rt.jar file (and maybe more). Searching in such a large file must be part of the reason java is so slow to load. If RoboVM gets smarter, perhaps it can throw out most of the 9.3MB binary for an even faster load?

The website mentions iOS, but I think that's because they're selling their add-on UI libraries. RoboVM compiled fine for me on a flavor of Ubuntu. Just make sure to do

> $ sudo apt-get install g++-multilib

first (and maybe install libpthread-stubs0-dev and libpthread-workqueue0...don't know if they mattered).

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFeelTheBurnsView Question on Stackoverflow
Solution 1 - JavaAshkanView Answer on Stackoverflow
Solution 2 - Javalei_zView Answer on Stackoverflow
Solution 3 - JavaAshkanView Answer on Stackoverflow
Solution 4 - JavaexpzView Answer on Stackoverflow