Jikes RVM is a compiler that translates JavaTM source files as defined in The Java Language Specification into the bytecoded instruction set and binary format defined in The Java Virtual Machine Specification.
You may wonder why the world needs another Java compiler, considering that Sun provides javac free with its SDK. Jikes has five advantages that make it a valuable contribution to the Java community: [OSI Certified Logo]
· Open source. Jikes is OSI Certified Open Source Software. OSI Certified is a certification mark of the Open Source Initiative.
· Strictly Java compatible. Jikes strives to adhere to both The Java Language Specification and The Java Virtual Machine Specification as tightly as possible, and does not support subsets, supersets, or other variations of the language. The FAQ describes some of the side effects of this strict language conformance.
· High performance. Jikes is a high performance compiler, making it ideal for use with larger projects.
· Dependency analysis. Jikes performs a dependency analysis on your code that provides two very useful features: Incremental builds and makefile generation.
· Constructive Assistance. Jikes strives to help the programmer write better code in two key ways. Jikes has always strived to provide clear error and warning text to assist the programmer in understanding problems, and now with release 1.19 Jikes helps point out common programming mistakes as documented in Effective Java.
Abridged from a FAQ entry which was adapted from some material by Lou Grinzo for an article he wrote.
The fact that Jikes is a high-performance, highly compatible Java compiler that can be used on almost any computing platform makes it an interesting program and worth investigating for almost any Java programmer. But Jikes is also notable because it lies at the center of two events: the adoption of open source philosophy and practice by large corporations, and the continued growth of Java for Linux.
It's worth pointing out that Jikes is not, and is not intended to be, a complete development environment -- it is simply a command line compiler. It should not be considered a replacement for more complete tools, such as Source Navigator or IBM's VisualAge for Java which provide sophisticated graphical IDEs (Integrated Development Environments).
The Jikes compiler was released in binary form in April 1997 on the IBM alphaWorks site. Jikes for Linux was released on 15 July 1998. The response was overwhelming -- Jikes had more downloads in the three months after the announcement than in the fifteen months before the announcement.
Around the end of March 2002, IBM opened a fledgling community hosting location attached to their developerWorks site with Jikes as a founding member. Approximately 3 years later this server was decommissioned and the most active projects migrated into SourceForge.net hosting options. During those three years Jikes was the #1 most popular project every month, often by a large margin. We approached nearly 250,000 downloads while residing at dw/oss, and had been consistently tallying triple digit daily downloads.
Release of Jikes for Linux was soon followed by requests to open up the source. Many notes and comments from users suggested this would be a good idea. The source was released under a liberal license in December 1998 to make a very visible demonstration of IBM's commitment to open standards and to Java Technology, to make Jikes more reliable and accessible, to encourage more widespread use of Java Technology, to encourage standardization of Java Technology, and to gain some experience actually running an open source project. This marked the start of one of IBM's first efforts in the open source arena.
The original alphaWorks version of Jikes was written by Philippe Charles and Dave Shields of the IBM T. J. Watson Research Center. For awhile after the release of the source they continued to work on the compiler as contributors; however, shortly after the project migrated to developerWorks' Open Source Server they were officially moved off onto other projects within IBM. Today there are no IBMers who work on Jikes as part of their job description. Jikes survives today soley based on the free time contributions of members of the open source community.
The source code is available under IBM's Public License, which has been approved by the OSI (Open Source Initiative) as a fully certified open source license. The project provides access to the complete CVS development tree, which includes not only Jikes, but also the source for the Jacks Test Suite and the Jikes Parser Generator used to build Jikes. Jikes is included in many Open Source Operating Systems. The Jacks Test Suite is a replacement for the Jikestst package.
What's New in This Release:
· [RVM-358] - Initial support for Apache Harmony class library
· [RVM-480] - Spec JVM 2008 regression test
· [RVM-534] - MMTk Test harness
· [RVM-540] - Implement java.lang.Compiler
· [RVM-591] - Support for jdocs.com javadoc
· [RVM-592] - Checks on creating ObjectReferences
· [RVM-72] - NonMoving annotations for classes instances of which should be allocated to the immortal heap
· [RVM-273] - Remove VM_ prefix from all VM classes
· [RVM-275] - Remove VMOpt prefix from opt compiler classes that go into bootimage
· [RVM-282] - Make dumpVirtualMachine more defensive
· [RVM-329] - Specialize IA32 assembler for lister vs. non-lister
· [RVM-333] - Annotations used for VM Pragmas (NoInline, Uninterruptible, etc) probably should not be as closed linked to classloaders
· [RVM-445] - Clean up handling of JTOC
· [RVM-449] - Handle instanceof and checkcast in ShortArray scalar replacer
· [RVM-477] - Gather new compiler DNA
· [RVM-501] - BuildWithAllClasses is (practically) unused
· [RVM-502] - Dead code elimination of pure calls
· [RVM-505] - Eliminate calls to VM_Class.getClass..FromStackFrame when stack frame is determinable
· [RVM-508] - Have hash map where entries are completely immutable saving references from boot image root set
· [RVM-510] - Create top level common directory to make it easier to split out and share useful components from rvm and MMTk
· [RVM-511] - Split out MMTk option processing support
· [RVM-512] - Experiment with freezing bucket array in VM_HashMap/VM_HashSet
· [RVM-513] - Large arrays in boot image cause memory leak
· [RVM-525] - Upgrade to GNU classpath 0.97.2
· [RVM-537] - Implement inline mustImplementInterface sequence for invokeinterface in baseline compilers
· [RVM-538] - Inline checkcast/instanceof sequences in baseline compiler for simple cases
· [RVM-572] - Remove OSR_ and BC_ prefixes from OnStackReplacement code
· [RVM-593] - Extra checks on references being traced in rvm
· [RVM-603] - Improve intel baseline prologue/epilogue/call by use push/pop instead of mov [sp]
· [RVM-594] - Naming of MM_Interface
· [RVM-46] - CaffieneMark failures on AIX/PPC
· [RVM-47] - DaCapo regressions on AIX/PPC
· [RVM-58] - Linker errors under AIX/ppc
· [RVM-105] - sysNetSelect doesnt seem to be avoiding the syswrap select
· [RVM-187] - VM_OptGenericMapIterator: findGCMapIndex failed
· [RVM-221] - Specialized scanning broken on ppc64-aix?
· [RVM-234] - Annotation issues: not implemented via proxy classes, support for serialization
· [RVM-269] - unresolved invokeinterface on should force classloading before rasiing NPE
· [RVM-271] - Timeouts for stress are not correct
· [RVM-303] - Cannot modify accessible final instance fields
· [RVM-325] - Spec JVM 98 jack failing with OOMs
· [RVM-327] - Performance degredation in IA32 assembler
· [RVM-332] - Eclipse 3.2 fails to run on the RVM
· [RVM-369] - PPC32-OSX - Crash in GC when a stack contains native frames
· [RVM-372] - Integer overflow in sysNanoTime
· [RVM-423] - Fop performance strangeness
· [RVM-442] - All poisoned tests fail PPC 32
· [RVM-454] - The sub-test TestAnnotationInheritance of the basic tests is excluded until it can be fixed
· [RVM-458] - Poisoned bit test highlights JNI problem
· [RVM-469] - Fix IA32 assembler to use Address instead of Offset for absolute addressing
· [RVM-482] - Crash when running Production_Opt0_perf portion of compiler-dna test run
· [RVM-483] - Conditionalize fsqrt generation on PowerPC
· [RVM-492] - Dumping empty stack kills VM
· [RVM-493] - VM_Annotation.readValue doesn't use the correct classloader
· [RVM-494] - Conversion between type descriptors, class names, and file names in VM_Atom behaves inconsistently
· [RVM-495] - Crash during first major GC on PPC64 tests when running with -X:processors=2
· [RVM-497] - New scan boot image assertion failing poisoned tests
· [RVM-499] - Overflowing JTOC during DaCapo eclipse run on PPC64 AIX
· [RVM-500] - No such field error: TreeMap$SubMap.minKey
· [RVM-504] - Increase time out on DaCapo eclipse for rvmppclnx64
· [RVM-506] - The field last in VM_HashMap and VM_HashSet is only ever set to null
· [RVM-514] - Pure on mathMagic breaks dacapo sunflow
· [RVM-521] - Freshly checked out r14346 fails to build with an uninterruptible violation
· [RVM-526] - GNU Classpath build: paths too long in check_jni.sh
· [RVM-527] - Harmony doesn't build 32bit libraries as necessary for x86_64 build
· [RVM-529] - Implement reflection API for Harmony
· [RVM-531] - Boot image stack size too small
· [RVM-541] - gc stress failures
· [RVM-542] - Incorrect encoding of inner class native method names
· [RVM-543] - Invoking JNI_OnLoad of unrelated libraries when loading a library with no JNI_OnLoad
· [RVM-544] - Class argument in NewObject ignored
· [RVM-547] - Building the boot image with the opt compiler and Harmony fails
· [RVM-550] - Implementation of isZero magic in PPC baseline compiler can overflow expression stack and corrupt stack frame
· [RVM-571] - BigDecimal Pure annotations causes crash on SPECjbb2005 for FullAdaptiveMarkSweep
· [RVM-582] - Fix all javadoc "syntax" errors
· [RVM-583] - Incorrect rounding on simplified integer divide
· [RVM-585] - RVM Identity HashMap doesn't use identity hashCode.. only identity.equals
· [RVM-587] - IdentityHashMaps in the bootimage
· [RVM-588] - Assertion failure in BC2IR for primitive array load
· [RVM-597] - Array index out of bounds in BC2IR generation context
· [RVM-598] - Increase use of unpreemptible
· [RVM-599] - New poisoned test failures on x86
· [RVM-608] - Object replacement ignores finalizer methods
Task and Sub-Task
· [RVM-37] - Doccument the command line options
· [RVM-42] - Build/Test infrastructiure to compute compiler DNA
· [RVM-490] - Null Pointer Exception in gnu.xml.transform.ParameterNode.clone
· [RVM-518] - Change build logic so that the VM prefix on a class name does not control inclusion in the bootimage
· [RVM-519] - Rename classes currently with VM_ prefix that will be confusing without it
· [RVM-520] - Update userguide to remove VM_ (and OPT_) prefix globally.