Jikes RVM (Research Virtual Machine) provides a flexible open testbed to prototype virtual machine technologies and experiment with a large variety of design alternatives. The system is licensed under an OSI approved license. Jikes RVM runs on many platforms and advances the state-of-the-art of virtual machine technologies for dynamic compilation, adaptive optimization, garbage collection, thread scheduling, and synchronization. A distinguishing characteristic of Jikes RVM is that it is implemented in the Java™ programming language and is self-hosted i.e., its Java code runs on itself without requiring a second virtual machine. Most other virtual machines for the Java platform are written in native code (typically, C or C++). A Java implementation provides ease of portability, and a seamless integration of virtual machine and application resources such as objects, threads, and operating-system interfaces.
Many researchers have found that Jikes RVM provides a useful vehicle for research on the frontiers of virtual machine technologies (over 188 publications and 36 dissertations), as well as teaching courses. If you are looking for where to start reading about the Jikes RVM we have a recommended reading page.
News
We are hoping to participate in the Google Summer of Code 2010. We have had some really excellent contributions to JikesRVM come out of previous Summers of Code so please take the time to visit our Google Summer of Code 2010 pages and possibly add some project proposals.
The organization application deadline is March 12.
Dear Jikes RVM Researchers,
We are writing to introduce two new members to the Jikes RVM Steering Committee, announce some changes to the project organization, and highlight our performance results, which are now competitive with the products on the DaCapo Benchmarks.
Steering Committee
We have invited Richard Jones (U. Kent) and Kathryn McKinley (U. Texas) to join us on the Steering Committee. Both Kathryn and Richard have accepted our invitation. Kathryn and Richard been involved with the project since its inception. They both have a long track record of engagement with the project; directly and through the activities of their respective research groups. Their addition to the committee reflects our view that our stakeholders are researchers and that our mission is enabling research.
Project Organization
We have also made a minor change to the project structure, replacing the term "Core Team" with "Jikes RVM Team". We also extend team membership to anyone who has demonstrated a substantial commitment to the project through concrete contributions. Such contributions are not limited to code, but may include substantive contributions to the health of the project in any form. These changes are intended to emphasize the importance of researchers as the primary stakeholders in this project, and to make it explicit that the importance of a member's input is not measured in terms of the quantity or quality of changes to the code base.
We will also now encourage team members to follow a "12 month rule", whereby they are asked to reassess their team membership after a period of 12 months of inactivity
Performance
Due to the efforts of the Jikes RVM Team in adding features (such as native threads, Immix GC, and biased locking), and tuning the adaptive system, we have recently achieved really excellent performance results. While Jikes RVM still lags behind the products on the SPEC benchmarks (the products are highly tuned for SPEC), Jikes RVM attains within 5% of their performance on the DaCapo Benchmarks. Results are available here: http://jikesrvm.anu.edu.au/performance/2009-07/
These performance gains make Jikes RVM an even more appealing research platform and offer more evidence that Java can be an effective system implementation language. ![]()
We hope that these changes will bring new life to the project and re-affirm the project's original objectives of supporting the research community. Kathryn, Richard and the rest of the Jikes RVM Steering Committee welcome comments, suggestions and feedback from our community.
David Grove
Steve Blackburn
Mike Hind
Jikes RVM version 3.1.0 has been released and is available for download at http://downloads.sourceforge.net/jikesrvm/jikesrvm-3.1.0.tar.bz2
It's been almost nine months since the release of Jikes RVM 3.0.1, and quite a bit has changed in Jikes RVM. We'd like to call out several items that may be of particular interest to the community.
- Jikes RVM has switched to using native threading instead of m-to-n (aka green) threading.
- The default mature space collector has changed from Mark-Sweep to Immix.
- Jikes RVM is now licensed under the Eclipse Public License (EPL).
- The 3.1 release significantly improves over the performance of 3.0.1, with speedups of 10% and 21% on average for DaCapo and SPEC benchmarks respectively on an Intel C2Q. Highlights include a 29% improvement in jbb and a 32% improvement in jython.
Details are given below, or are browsable online in our JIRA instance at http://jira.codehaus.org/browse/RVM/fixforversion/14620.
New Feature
- RVM-641 - Make Immix the default mature space collector
- RVM-682 - Assertion checking in sysMalloc
- RVM-802 - Debugging hooks in MMTk
- RVM-806 - Heavyweight sanity checker for MMTk Harness
- RVM-807 - Simple type system for MMTk Harness scripting language
Bug
- RVM-460 - Not accounting for nursery promotion AND defrag in GenImmix
- RVM-498 - ppc-linux32 dying on SPEC jbb 2005 with 4 threads
- RVM-613 - asking if a method has a hasBaselineSaveLSRegistersAnnotation triggers classloading (and thus GC) when GC is disabled during OSR
- RVM-625 - FullAdaptiveImmix and FullAdaptiveStickyImmix broken on ppc32-linux
- RVM-638 - Crash in Poisoned configs on PPC (aix/linux, 32/64) apparently relating to clone
- RVM-662 - Error growing discontiguous space
- RVM-664 - Occasional digest validation errors on lusearch performance runs
- RVM-683 - Fix race in AOS controller/organizer synchronication during startup
- RVM-690 - Class loader and reflection problems for unboxed types
- RVM-696 - Don't recomend copying project contents with eclipse-project
- RVM-698 - Don't clear most significant bits for <32bit return types on Intel breaks Ubuntu 8.10
- RVM-700 - Not running class initializer for InetAddress causing ServerSocket failures
- RVM-701 - Edge Counter and Dynamic Call Graph output after run fails
- RVM-703 - Throwable.getStackTrace() implementation is incorrect
- RVM-704 - Regressions from 2.9.1 not allowing jetty web server to run
- RVM-708 - Bad reference map created by IA32 baseline compiler
- RVM-712 - Uninterruptible code should not be allowed to call UnpremptibleNoWarn methods
- RVM-722 - Bug in Static Spliting induces unconditional OSR invalidations when running _228_jack in measure compilation mode
- RVM-729 - enabling simple_escape_ipa causes a ClassCastException
- RVM-732 - Exception in thread "MainThread" java.security.AccessControlException: permission (java.lang.RuntimePermission exitVM) not granted: no protection domains
- RVM-733 - rvm crash when closing a file in ExitMonitor.notifyExit(int value)
- RVM-738 - Fix debugging output when extracting long variable values for OSR
- RVM-743 - compress-3GC fails with OOME
- RVM-744 - Terminal not in grammar: read_ceiling (BURS)
- RVM-748 - Bug in type checking when > 32767 types
- RVM-756 - Intel unnecessarily restricts boot image to be at addresses > 0x30000000
- RVM-774 - Incorrect implementation of static initializers in the case of initializers that throw exceptions
- RVM-795 - Baseline GC Maps with JSRs fails to set reference flag for aload operations
- RVM-800 - In TemplateCompilerFramework.genCode, case JBC_anewarray, I don't believe that the array resolution and instantiation path is ever taken
- RVM-808 - OutOfMemoryError when allocating a 200 MB tab
- RVM-811 - Immix: "Chunk map overflow" on jbb2005 ppc64-linux
- RVM-814 - Wrong exception from Java reflection
- RVM-828 - Do not search superclasses for a method unless no method is found.
Improvement
- RVM-91 - Modularize threading system (native thread support)
- RVM-283 - Increase frequency of timer-based method sampling
- RVM-362 - Sort accumulating operands on to LHS of commutative operations
- RVM-462 - Immix code still contains huge number of experimental variables
- RVM-532 - Harmony's OSMemory implementation uses JNI
- RVM-612 - Assertion checking on stack height in baseline compiler
- RVM-689 - Update MMTk tutorial
- RVM-709 - Document meaning of constants in build reference maps
- RVM-725 - Increase command line options for tuning opt compiler behaviour
- RVM-736 - Disable ImmutableEntryHashSetRVM.remove()
- RVM-737 - Support local variable table for methods
- RVM-739 - Made org.jikesrvm.compilers.opt.util.Pair generic and moved it to package org.jikesrvm.util
- RVM-740 - Support for floating point conditional moves on Intel with SSE
- RVM-741 - Support for negation and abs() using SSE2 bit masks
- RVM-775 - Cleanup up code that obtains targets of pseudo_invokestatic instruction
- RVM-791 - Clean up and modularize locking
- RVM-801 - Minor change: Reorganize ClassFileReader by moving code for reading in the constant pool into a separate function
- RVM-803 - Use for-each loop in RVMClass wherever possible
Tasks and Sub-tasks
- RVM-817 - Change Jikes RVM license from Common Public License to Eclipse Public License
- RVM-685 - Implement x86 64 JNI Compiler
- RVM-751 - Implement PowerPC syscalls
- RVM-759 - Stack maps seem to be broken
- RVM-779 - Update userguide to decribe native threads
- RVM-783 - Fix baseline Intel 64bit reference maps
- RVM-786 - Adjust sampling mechanism in AOS to account for native threads
- RVM-787 - Outline exception raising code in gnu.java.lang.CPStringBuilder to enable better inlining
- RVM-29 - Track website traffic via sourceforge logo requests