shuJIT
- Java Just-in-Time Compiler for x86 processors
last-modified: May 30, 2017
[Japanese] [English]
Here http://www.shudo.net/jit/
ShuJIT is a JavaTM Just-in-Time compiler
for Sun Microsystems' Classic VM (i.e. JDK, Java 2 SE, JRE)
and Intel x86 processors.
It supports FreeBSD, Linux and NetBSD.
What's New
- May 30, 2017
- 0.8.1 was released.
- Character encoding was changed to UTF-8.
- Source code is uploaded to GitHub.
- August 8, 2005
- 0.8.0 was released.
- Can be compiled by GCC 4.0.1.
- Win32 and Xbox support incorporated, but not confirmed to work.
- April 9, 2003
- Added a list of papers which refer to shuJIT.
- January 20, 2003
- 0.7.14 was released.
- Can be compiled by GCC 3.2.
- Optimizes the abs methods of java.lang.Math classes by replacing them with prepared native code. In Java 2, this technique is also applied to exp, asin and acos.
(The sqrt, sin and so on have been optimized in this way from ver. 0.3.8.)
- Fixes a problem that terminates the JVM abnormally when a constructor is called on a null reference with JDK 1.1.X. ShuJIT now does not eliminate null checks on such invocations because the bytecode verifier of JDK 1.1.X overlooks them.
- July 17, 2002
- 0.7.13 was released.
- A workaround for a bug of Orion 1.5.4 implemented. This can be enabled by defining the SLACK_ACCESS_CONTROL macro in compiler.h.
- August 21, 1999
- 0.3.7 was released.
- September 20, 1998
- First public release.
FreeBSD
Tested on
- JDK 1.3.1 patchlevel 8, GCC 2.95.4 and FreeBSD 4.8-STABLE
- JDK 1.1.8 (ELF, V1999-11-9), GCC 2.95.4 and FreeBSD 4.8-STABLE
Linux
- Blackdown JDK 1.3.1_02b, GCC 3.1 20020314, glibc 2.2.5, Linux 2.4.21-pre3
- Blackdown JDK 1.2.2, GCC 3.1 20020314, glibc 2.2.5 and Linux 2.4.21-pre3
- JDK 1.1.8v3, GCC 3.1 20020314, glibc 2.2.5 and Linux 2.4.21-pre3
- JDK 1.1.7v1a, egcs 1.1.2, libc 5.4.38 and Linux 2.0.35
ShuJIT is distributed under the terms of GNU LGPL.
This page shows
results of performance comparisons among Java runtime systems,
running SPEC JVM98, SciMark 2.0, Linpack benchmark and Eratosthenes Sieve.
- Experiments to change the recognition of bytecode by JVM
- JIT compilers can generate native code which doesn't comply with JVM specification.
- I've implemented MetaVM (a paper in Japanese is here). It's a very transparent distributed object system. It allows programmers to write code executed on distributed machines in the just same style as code executed locally.
- Optimization
- eliminate boundary check and more analysis.
- Working with thread migration system MOBA
- Make shuJIT work with migration of execution context.
Project
- OpenJIT
- The project aims to let programmers be able to customize behavior of JIT compiler with Java language's own.
- It supports FreeBSD/x86, Linux/x86 and Solaris/SPARC.
- Jaguar
- Jaguar is a research project and a system which allow direct access to OS and hardware resources to Java programs.
- Direct access without JNI reduces an overhead of memory copy and achieves high-performance communication and I/O.
- A former implementation of Jaguar employs shuJIT to change native code generated by the JIT.
- This project is drived by Matt Welsh.
Java runtime system and JIT compiler
- Open Runtime Platform (http://intel.com/research/mrl/orp/)
- A Java runtime system for x86, developed in Intel Microprocessor Research Labs.
- It has two JIT compilers (O3 and O1).
- In future, part of source code which supports IA-64 will be available.
- TYA (http://sax.sax.de/~adlibit/)
- JIT compiler for Linux/x86 and FreeBSD/x86.
- JBuilder JIT for Linux
- JIT compiler for JDK 1.2/Linux/x86 developed by Inprise.
- Now this compiler is included in Sun/Inprise JDK 1.2.X for Linux.
- ElectricalFire
- JVM whose purpose is achievement high performance. It doesn't have an interpreter.
- Kaffe
- A Java application environment is built from scratch. It has JIT compiler.
- Japhar
- Another JAE is built from scratch. It doesn't have JIT compiler (yet?).
- BulletTrainTM
- Static compiler developed by NaturalBridge LLC..
- It converts Java bytecode to x86 native code, supports Win32.
- It implements strictfp semantics properly.
- Java-Linux
- Linux port of JDK.
- FreeBSD Java Project
- FreeBSD port of JDK.
References
- The JIT Compiler Interface Specification
- C language API to build a JIT for Sun's Classic VM.
- Sun supports this API any longer.
- JNI (Java Native Interface) satisfies programmer's usual requirements but JIT writers still need this interface which Sun doesn't support.
- The Java Virtual Machine Specification (Tim Lindholm, Frank Yellin)
- JVM and JIT writers should refer to this document.
Papers which refer to shuJIT
- Michal Cierniak, Marsha Eng, Neal Glew, Brian T. Lewis, James M. Stichnoth:
"The Open Runtime Platform: A Flexible High-Performance Managed Runtime Environment",
Proc. of Joint ACM Java Grande - ISCOPE 2002 Conference (JGI2002), pp.156-164,
November 2002
- Matthias Jacob, Keith Randell:
"Cross-Architectural Performance Portability of a Java Virtual Machine Implementation",
Proc. of 2nd Java Virtual Machine Research and Technology Symposium (JVM'02), pp.79-89,
August 2002
- Dachuan Yu, Zhong Shao, Valery Trifonov:
"Supporting Binary Compatibility with Static Compilation",
Proc. of 2nd Java Virtual Machine Research and Technology Symposium (JVM'02), pp.165-180,
August 2002
- Matt Newsome, Des Watson:
"Proxy compilation of dynamically loaded Java classes with MoJo",
Proc. of the joint conference on Languages, compilers and tools for embedded systems (LCTES'02): software and compilers for embedded systems (Scopes'02)",
pp.204-212,
June 2002
- Vikram Chhabra, Akshay Kothare, Mark Claypool:
"The Effects of Locality, Content and Runtime on the Performance of Video in Java",
Proc. of the IASTED Conference on Applied Informatics",
Innsbruck, Austria, February 2002
- Matt Welsh, David Culler:
"Jaguar:
Enabling Efficient Communication and I/O in Java",
Concurrency: Practice and Experience,
Vol.12, pp.519-538, Special Issue on Java for High-Performance Applications,
December 1999.
Back to
Copyright (C) 1998,1999,2000,2001,2002,2003,2004,2005,2017 Kazuyuki Shudo
<shudo at computer.org>