O'Reilly have released a new book called Beautiful Architecture. Ian Rogers and Dave Grove have written a chapter entitled The Strength of Metacircular Virtual Machines: Jikes RVM intended to serve as an overview and initial reference to the design of Jikes RVM. Proceeds from the book go to Médecins Sans Frontières.

To celebrate the double milestones of this being the 10th year of Jikes RVM development and the release of Jikes RVM 3, we've decided to create t-shirts to reward Jikes RVM contributors. Whilst meta-circular virtual machine development in Java may result in beautiful code it might not be a true indicator of other artistic ability. We've therefore decided to have a competition for people to put forward their design of what should be on our t-shirts. We have cash to ensure the production of the t-shirts from the mentor payments of this years Jikes RVM Google Summer-of-Code (thanks Google and the mentors!). The deadline for submissions to the competition is January 1st 2009. Remember to keep contributing so that you will be inline to receive free Jikes RVM booty! For more information on the competition please use the jikesrvm-researchers mailing list.

Jikes RVM 3.0.1 Released

Jikes RVM version 3.0.1 has been released and is available for download at http://downloads.sourceforge.net/jikesrvm/jikesrvm-3.0.1.tar.bz2

The detailed release notes for major changes since 3.0.0 can be found below or in JIRA (http://jira.codehaus.org/browse/RVM/fixforversion/14378);

** New Feature
* [RVM-507] - Initial prototype of TuningFork trace generation in Jikes RVM
* [RVM-515] - Make boot image writer traversal of object graph configurable
* [RVM-517] - Reflection optimization
* [RVM-528] - Support for eclipse-project with Harmony class libraries
* [RVM-634] - Add RuntimePure annotation to indicate when a Pure annotation should only be respected at runtime
* [RVM-673] - Implement Inline.When.AssertionsDisabled pragma

** Improvement
* [RVM-291] - Immortal objects with address based hashing should set their hashed bit during boot image writing
* [RVM-443] - Avoid back references in java.lang.reflect VMXXX classes
* [RVM-476] - Make lock allocation thread-model-agnostic.
* [RVM-627] - Use java.nio for writing boot image
* [RVM-632] - Space improvements of RVMClass.objectCache
* [RVM-633] - Avoid the use of Reflection to invoke Object.finalize()
* [RVM-644] - Reduce copying of char[] in java.lang.reflect.Proxy
* [RVM-650] - Ask users to submit bug reports on Jikes RVM crashes

** Bug
* [RVM-172] - Failing DaCapo benchmarks on PPC 32 OS X
* [RVM-288] - Assertion failure in inline oracle
* [RVM-318] - java.util.Scanner is unimplemented
* [RVM-346] - SPECjvm98: Invalid runs should not be SUCCESSes
* [RVM-410] - Problem with changes to stack walk
* [RVM-440] - Poisoned tests failing in finalizer thread
* [RVM-471] - Stack frame alignment broken for Intel on OS/X
* [RVM-605] - Possible fix for FreeListPageResource.releasePages()
* [RVM-606] - Problems with OSR guarded inlining of invokeinterface
* [RVM-614] - BaseBasePoisoned build segfaults during VM bootup on pcc64-linux
* [RVM-617] - DaCapo bloat fails with Apache Harmony class library
* [RVM-619] - DaCapo eclipse fails with Apache Harmony class library
* [RVM-621] - DaCapo xalan fails with Apache Harmony class library
* [RVM-623] - Intel 16bit operations with immediate operands in some cases generate 32bit immediate operands rather than 16bit
* [RVM-631] - Bug in new Finalization code
* [RVM-636] - Crash in reflection during JSR-166 TCK
* [RVM-643] - Invalid InstructionFormat usage in Simplifier, but real bug is that IR is semantically malformed
* [RVM-645] - Bug in LiveAnalysis related to modeling of dataflow through Exception edges in the FCFG
* [RVM-646] - Immix defrag broken
* [RVM-652] - build failure on IA32 OS X 10.5 (Leopard)

** Tasks and Sub-task
* [RVM-651] - Add support to Intel assembler for REX prefix byte
* [RVM-667] - Modify the implementation of table switch
* [RVM-669] - Build/boot image runner support for x86 64
* [RVM-671] - Fix spill location size estimates

Jikes RVM 3.0.0 released

We're very happy to announce the release of Jikes RVM version 3.0.0.

The road towards 3.0 began just about two years ago and a large number of people, both on the core team and from our user community at large, have contributed to making it a success. Thank You!

The release is available for download at http://downloads.sourceforge.net/jikesrvm/jikesrvm-3.0.0.tar.bz2

The detailed release notes for major changes since 2.9.3 can be found below or in JIRA (http://jira.codehaus.org/browse/RVM/fixforversion/13530),
but we'd like to highlight some of the larger themes that went into the 3.0 release (many of which have already been released in the 2.9.x releases we've made along the way).
** Normalization of source code and build process
*** Complete rewrite of the build/test systems to use ant.
*** Jikes RVM can be developed in Eclipse using the JDT
*** Extensive restructuring of package structure
*** Removal of VM_ and OPT_ prefixes from all source files.
** Increased system stability and performance
*** A new continuous testing system (http://jikesrvm.anu.edu.au/cattrack)
*** Concerted stability and performance drives
** Java 5 support
*** Support for Java 5 language features
*** Use of Java 5 language features throughout the code base

Detailed list (89 issues closed in the 3 months since 2.9.3)

** New Feature

  • [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

** Improvement

  • [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

** Bug

  • [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 <null> 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.
Jikes RVM 2.9.3 Released

We're very proud to announce that Jikes RVM version 2.9.3 is now available for download! It's been a little bit longer than usual since the last release and there's been quite a bit of activity on the project and improvements to the system. The appended release notes capture many of the highlights; for more details see JIRA.

The release is available from SourceForge.
** Improvement
    * [RVM-81] - Annotations in java.lang classes through bytecode engineering
    * [RVM-195] - Enable inlining of @Pure methods
    * [RVM-274] - Remove OPT_ prefix from all opt compiler classes
    * [RVM-276] - opt compiler package structure
    * [RVM-304] - Improve performance of character encoder when encoding to and from arrays
    * [RVM-305] - Add final annotations to java.io.OutputStreamWriter
    * [RVM-308] - Greater use of StringBuilder rather than StringBuffer
    * [RVM-309] - Greater use of "<Number>.valueOf" rather than "new <Number>"
    * [RVM-310] - Class library fields that could be final aren't final
    * [RVM-311] - String toUpperCase and toLowerCase perform a String.equals to see if the Locale is Turkey per invocation
    * [RVM-322] - Intel assembler register naming improvement
    * [RVM-331] - Implement support for MMX registers
    * [RVM-343] - Support for hardware SQRT instruction
    * [RVM-344] - Simplifier rule for square root operator
    * [RVM-378] - Avoid replicating field and method vectors
    * [RVM-379] - Don't replicate OSR_EncodedOSRMaps
    * [RVM-381] - Upgrade to Classpath 0.97
    * [RVM-385] - Refactor reflection to use VM interface
    * [RVM-387] - Baseline compiler emits RegDisp instructions when the Disp is 0
    * [RVM-390] - VM_Statics/JTOC space saving has cost us single iteration fop performance
    * [RVM-391] - Assign CPU # to each VM_Processor to have more predictable performance results. 
    * [RVM-392] - Improvements to ZipEntry
    * [RVM-395] - Local common sub-expression elimination of Pure method calls
    * [RVM-408] - Simple elimination of stack traces
    * [RVM-417] - Switch performance runs to using a profiled image
    * [RVM-421] - Pre-allocate 1 set of exception registers for athrow
    * [RVM-422] - Update to latest Classpath j.u.c.CopyOnWriteArrayList
    * [RVM-431] - Fix processor JNI entry/collector rendezvous race
    * [RVM-433] - Increase final fields in java.nio
    * [RVM-435] - Don't allocate memory when converting C buffers to Strings or Classes
    * [RVM-437] - Integer.toString doesn't keep cache of common values
    * [RVM-451] - Structure of code in GNU Classpath java.util.Vector and java.util.Arraylist interacts poorly with inlining

** New Feature
    * [RVM-210] - Add Image sizes tracking to Regression report and mailout
    * [RVM-319] - Create X10 test harness
    * [RVM-406] - Add Immix garbage collector
    * [RVM-441] - Sticky mark bits collector
    * [RVM-457] - Immix Garbage Collectors
    * [RVM-266] - Provide preliminary support for a non-copying unsynchronised StringBuffer implementation

** Task and Sub-task
    * [RVM-425] - Implement 2d array helper for PPC baseline
    * [RVM-224] - Push OSR-specific fields in VM_NormalMethod to subclass/side data structure
    * [RVM-450] - Prevent compilation at max opt level before some dynamic call graph information has been gathered
    * [RVM-453] - Testing framework missing failures in basic tests that use diff for sanity.

** Bug
    * [RVM-196] - VM_Processor not assignable with VM_GreenScheduler
    * [RVM-314] - Support for Java 1.4 assertions
    * [RVM-315] - java.lang.Method.invoke changes the parameters
    * [RVM-316] - A Null pointer for the UTF8CHARSET in java.util.zip.ZipFile$PartialInputStream
    * [RVM-326] - Failing basic tests don't signal failure
    * [RVM-330] - Thread.sleep() does not handle interrupts correctly
    * [RVM-339] - Image bloat (code +25% & data +5%)
    * [RVM-340] - Annotations don't handle arrays of primitive types correctly
    * [RVM-342] - NPE with advice files
    * [RVM-347] - PPC 64 regressions and Intel stress regressions since the introduction of read barriers
    * [RVM-351] - Javac regression
    * [RVM-352] - Running many iterations of _200_check fails floating point remainder test
    * [RVM-353] - Production Opt 0 builds broken
    * [RVM-355] - Complete SPEC JVM with 20 iterations dies in GC
    * [RVM-357] - Fatal error when synchronising on null objects
    * [RVM-365] - PPC (AIX) Stack Scanning Appears Broken
    * [RVM-368] - Compiler confusion over equal but non-identical objects
    * [RVM-374] - Static field allocation is non-deterministic
    * [RVM-380] - We create a lot (15909) optimization plan atomic elements using 572724bytes in the boot image
    * [RVM-383] - Branch likely and unlikely prefixes show up as LOCK prefixes in x86 disassembler output
    * [RVM-394] - Tune inlining of arraycopy
    * [RVM-412] - Latent branch optimization bug when maximizing blocks
    * [RVM-424] - Multianewarray confusion in opt compiler
    * [RVM-439] - OSR triggering code misuses suspend/resume
    * [RVM-447] - Inline size estimation reduction factor calculation over rates precise information causing bloat and slow down
    * [RVM-452] - Off-by-one error in "VMField.checkReadAccess" and "VM.checkWriteAccess"
    * [RVM-456] - Clean build broken
    * [RVM-464] - Opt compiler ldc_w for class literal broken
    * [RVM-466] - Four tests in test run "tiny" fail when compiled with -X:aos:initial_compiler=opt -X:aos:enable_recompilation=false
    * [RVM-467] - BURS performing illegal reordering to before PEI
    * [RVM-468] - Instanceof test differs in opt compiler from baseline for instanceof/checkcast of magic[][]
    * [RVM-478] - Redesign AIX native method Linkage conventions to protect CMID field from being smashed by native code saved CR

Congratulations to Georgios Gousios (Athens University of Economics and Business), Byeongcheol Lee (University of Texas in Austin), Filip Pizlo (Purdue University) for being selected to work on Jikes RVM projects for the SoC. Georgios is working on Jikes RVM and JNode integration, Byeongcheol is working on extending debugger support, Filip is looking at extending the threading model.

I'm pleased to announce the Jikes RVM has been accepted into the Google Summer of Code for the 2nd year! We have a range of mentors bringing together experience from the Jikes RVM and related projects. Please have a look at our project proposals and our application template. As with last year, if you think there is an interesting project that should be listed but hasn't been then please feel free to propose it. To better integrate with our bug and feature tracking system we would much prefer if such proposals could also be added in to our issue tracker. We look forward to interest from prospective students! Don't forget the deadline for applications is March 31st.

Jikes RVM (nee Jalapeno) turned 10 years old last week!  The first lines of code in what became Jikes RVM were written by Derek Lieber on Nov 21, 1997.

Jikes RVM 2.9.2 Released

We're very proud to announce that Jikes RVM version 2.9.2 is now available for download. As you can see from the appended release notes, there's been quite a bit of activity on the project since 2.9.1!
The release is available at http://downloads.sourceforge.net/jikesrvm/jikesrvm-2.9.2.tar.bz2.

New Features

  • [RVM-121] - Separate code space for dynamically generated code
  • [RVM-231] - Alignment checking (for IA32 and debugging purposes only)


  • [RVM-16] - Constant folding values from TIBs produces failures
  • [RVM-27] - float/double to int/long conversions are overly expensive
  • [RVM-51] - Switch from pthread hijacking back to portable native sync for gtk AWT threading
  • [RVM-54] - Switch to Claspath's java.lang.Thread
  • [RVM-64] - Flexible thread model
  • [RVM-82] - Exceptions in Uninterruptible code should result in immediate fatal errors
  • [RVM-94] - Enable SSE C/C++ compiler flags
  • [RVM-164] - Use clock_gettime to implement sysNanoTime
  • [RVM-179] - Move java/lang/String out of libraryInterface and into a patch against Classpath
  • [RVM-185] - Reduce cost of ThreadLocal(s) to improve Jython performance
  • [RVM-189] - Use will never move information from MM_Interface when generating constant operands
  • [RVM-191] - Improve inline size estimator in VM_NormalMethod to account for getstatic of final primitive fields being folded by opt compiler
  • [RVM-218] - Use VM_Magic.pause in spinwait loops
  • [RVM-285] - Switch AOS call graph profiling to use CBS framework from Arnold & Grove 2005

Bug Fixes

  • [RVM-55] - A thread that is interrupted prior to being scheduled won't interrupt
  • [RVM-62] - Interrupted exceptions are generated in the caller of Thread.interrupt instead of by the thread throwing the interrupted exception
  • [RVM-63] - Unsafe.park time values are incorrectly scaled
  • [RVM-87] - NPE in ScanThread.setUpFrame:360
  • [RVM-99] - MeasureCompilation reporting broken in production/development builds on ia32-linux
  • [RVM-104] - eclipse occasionally fails with segmentation fault
  • [RVM-109] - Restore documentation to org.vmmagic.pragma.*
  • [RVM-112] - Verification error when building Jikes RVM 2.9.1 using HotSpot as host JVM.
  • [RVM-113] - MarkCompactLocal.compact():80 assertion failure
  • [RVM-114] - Ensure time is positive in test results
  • [RVM-125] - Waiting on a lock that should raise illegal monitor state exception will actual fail on an assert
  • [RVM-129] - GCTrace fails with "Cannot understand directive!"
  • [RVM-131] - Collection.joinCollection() called when thread switching disabled
  • [RVM-133] - Increase the amount of memory used during nightly tests
  • [RVM-140] - Conflicting virtual address request for space "trace" on ppc32-linux
  • [RVM-141] - SharedDeque assertion failure during exit for GCTrace
  • [RVM-143] - VM_BuildBB.determineTheBasicBlock may not be correct for goto_w operation
  • [RVM-144] - JikesRVM can't load certain classes e.g. GNU Classpath examples or its own Ant tasks
  • [RVM-150] - Unexpectedly large processor lock contention
  • [RVM-154] - A shutdown hook can hang RVM
  • [RVM-155] - SynchronizationBarrier.removeProcessor assertion failure
  • [RVM-159] - OSR-guarded inlining should not be allowed in uninterruptible code
  • [RVM-181] - ClassCastException in OPT_Simplifier when running antlr DaCapo
  • [RVM-183] - Thread sitting on >1 queue
  • [RVM-194] - Assertion failure in OSR State Extractor running chart
  • [RVM-198] - NPE when unlocking lock
  • [RVM-201] - Classpath AWT is broken
  • [RVM-203] - terminal not in grammar: new
  • [RVM-204] - Reduce wasted code space on inline allocation path
  • [RVM-206] - Stack walking in MMTk not correctly identifying not yet obsolete methods?
  • [RVM-209] - Bootimage bloat broke ppc64-aix images
  • [RVM-213] - jbb2005 performance regression
  • [RVM-216] - MMTk assertion failure during jbb large heap performance runs
  • [RVM-219] - Address.attempt*() compiles incorrectly on IA32 with Jikes 2.9.1
  • [RVM-220] - jbb2005 GC performance mode: Warning: number of GC phases exceeds MAX_PHASES
  • [RVM-242] - Build break: BaseBaseGCTrace
  • [RVM-245] - Change to deques appears to have significantly reduced hsqldb performance
  • [RVM-270] - NPEs from barrier code not working
  • [RVM-277] - lusearch fails on PPC32 due to validation error
  • [RVM-279] - Performance regression
  • [RVM-293] - Class loaders do not isolate packages with the same name
  • [RVM-297] - Classpath 0.96 configure problems with JDK 1.6
  • [RVM-298] - DaCapo chart broken on classpath 0.96
  • [RVM-299] - possible performance regression on xalan on classpath 0.96
  • [RVM-301] - JSR 166 failures

Tasks and Sub-tasks

  • [RVM-38] - VM_BaselineBootImageCompiler should use System.nanoTime rather than DNA for compilation time
  • [RVM-286] - _201_compress took a 10% hit when we switched to Arnold/Grove call graph profiling; investigate
  • [RVM-217] - Recode spin loop in org.mmtk.utility.deque.Deque spinWait to reduce frequency of nanoTime calls
  • [RVM-230] - Determine whether patching Classpath sources is preferable to bytecode engineering adding annotations
New core team members!

We are very happy to welcome Michael Bond and Andrew Hughes to the Jikes RVM core team! Both Michael and Andrew have made numerous contributions to the RVM and we look forward to their future efforts.

Jikes RVM 2.9.1 Released

We're very proud to announce that Jikes RVM version 2.9.1 is now available for download. There's been quite a bit of activity on the project since 2.9.0, and all kinds of good reasons to move up to this new version of Jikes RVM! 
The release is available at http://downloads.sourceforge.net/jikesrvm/jikesrvm-2.9.1.tar.bz2.

Jikes RVM 2.9.1 Release Notes (July 2, 2007)


A major stability drive has resulted in Jikes RVM being able to reliably run the entire DaCapo benchmark suite on ia32-linux. The following issues were resolved to make this possible:

  • multiple benchmarks: 
    • r12809: Missed lock prefix (stack scanning failures). 
    • r12737: GC map iterator crashed on dynamic link frames. 
  • eclipse: 
    • r12302: Classpath RandomAccessFile incorrectly truncated. 
    • r12394: PLOS exhaustion bug in MMTk. 
    • r12375: ThinLock of interface from OPT code. 
    • r12815: Bad GC map in JNI methods. 
    • r12722: Fix for GC map bugs around expection throws. 
  • lusearch: 
    • r12602: Floating point precision (SSE2). 
    • r12633: Parallel hardware traps. 
  • hsqldb: 
    • r12683: Invalid assertion in VM_Thread. 
  • xalan: 
    • r12742: Missing static initializer broke jar caching (halves runtime). 
    • r12753: FileOutputStream wastefully copying arrays (halves runtime). 

New eclipse-project ant target to make it easy to get up and running in eclipse.

As part of the stability drive, many O2 optimizations in the optimizing compiler have been moved to O3 (and thus are not enabled by default). The performance impact of this has been mixed. For example, on ia32-linux SPECjvm98 performance actually improved by 29% due to massive improvements in mtrt and mpegaudio enabled by SSE2. Performance on SPECjbb2005 degraded by 3-10%. There were significant gains on some individual DaCapo benchmarks (most notably xalan). Re-building an aggressive O2 optimization package by stabilizing current O3 optimizations and by building new optimization passes will be one of the focus areas for the project going forward.

The recommended version of GNU classpath is 0.95. Earlier versions of GNU classpath are not supported.

SSA expression folding has been expanded to cover far more cases than previously. This leads to a > 1% speedup on benchmarks such as SpecJBB'05.

Source code analysis of the code base has been enabled using PMD (http://pmd.sourceforge.net/). Basic analysis is enabled by default and this will expand over time.

Methods in VM_Type that duplicated functionality in VM_TypeReference now delegate to associated VM_TypeReference.

The ability to force a garbage collection after N allocations or at every exception delivery has been revived and is controlled by the configuration variable config.stress-gc-interval which should be set to non-zero value to enable.

Simplistic debug symbols to show boot image method entry points in gdb. Resolved issues with rvm script so this works with rvm -gdb now.

New faster primary regression machine (Core 2 Duo) for ia32-linux at ANU. Resolved performance issues with previous regression machine.

Introduced the capability to patch against classpath versions. This allows us to keep backported performance optimizations and/or bug fixes.

Implementation of returning global JNI references from C to Java.

VM_ prefix added to classes that must be included in the primordial class list. Classes affected include; PrintLN, PrintContainer, ApplicationClassLoader, DebuggerThread, FinalizerThread, MainThread, PPC_Disassembler, opcode_tab and opcodeXX.

Classes in the adaptive package have been reorganized into packages to match the directory layout in 2.4.6 release.

Classes that resided in the objectmodel directory in 2.4.6 have been moved in to the "org.jikesrvm.objectmodel" package.

Classes that resided in the scheduler directory in 2.4.6 have been moved in to the "org.jikesrvm.scheduler" package.

Classes that resided in the runtime directory in 2.4.6 have been moved in to the "org.jikesrvm.runtime" package.

Bug fixes

Baseline GC map bug for handler blocks affecting SPECjbb2000 (r12685).

Classpath race in cloning of XML Node affecting SPECjbb2005 (r12395).

Fix final field chasing in OPT_Simplifier and re-enable constant folding for fields.

A GC map generation problem caused by casting Address to Objects and has been eliminated.

Google SoC starts!

The Google SoC has started and the six successful projects are underway. The projects cover a range of issues in the RVM:

  • implementing that Java management extensions (JMX) in the Jikes RVM will allow greater monitoring with the use of standard tools
  • JDWP and JVMTI will add greater debugability to the RVM
  • the implementation of new register allocator techniques will improve the performance of the RVM
  • implementing new garbage collectors for MMTk will increase its usefulness
  • vectorization will enable the RVM to become a test bed for dynamic compilation for vectorization
  • instruction scheduling will add greater flexibility and performance to the optimizing compiler

We look forward to these great contributions to the RVM and thank the SoC project applicants for working on them!

Google has announced the successful applicants to work on the Jikes RVM for the summer of code (SoC). The mentors were surprised at the number of applicants, their diverse geographic locations, their excellent knowledge and willingness to bring contributions to the Jikes RVM. We'd really like to thank all of the applicants for applying and we're sorry that we couldn't accept more. We hope unsuccessful applicants will continue to participate with the Jikes RVM, file bug reports, talk on the mailing lists and hopefully there will be a new opportunity to take part in the SoC next year! We're now very excited now by the contributions (and hard work (smile)) to be brought by the successful SoC applicants.

Be quick! Students only have until Monday, March 26th to submit proposals for work they'd like to undertake with the Jikes RVM for the Google SoC. In our summer of code area we have a list of project ideas that should give you some ideas for project proposals. You can always come up with your own! For ideas on what the Jikes RVM has been used for in the past, browse these web pages. There really is an opportunity to write a project proposal that interests just about anybody with the Jikes RVM! As we say on the home page, the Jikes RVM is a flexible testbed for ideas. These ideas have ranged from binary translators (high performance emulators), to Java operating systems, to dynamically typed language support (for languages such as Perl), to aspect oriented programming, to state-of-the-art compiler, threading and garbage collection performance ideas.

Unsure about project ideas and your own ideas for things you can do with the Jikes RVM? The Jikes RVM community is an excellent sounding board. Why not subscribe and post your questions to the researchers mailing list. We welcome the opportunity to discuss your ideas, don't be afraid of the forum!

The Google SoC 2007 is an opportunity for students to be paid to develop the JikesRVM! The Jikes RVM was one of only 131 organizations selected by Google. For more information on the Google SoC and the Jikes RVM, see our SoC pages.