SableVM release news. * Version 1.0.9 =============== - Port to various Debian architectures. - Port to Mac OS X. - Bug fixes. * Version 1.0.8 =============== - Bug fixes. * Version 1.0.7 =============== - Port inline-threaded engine to ia64 and alpha. - Get SableVM to execute classes compiled using Jikes 1.18. - Minor bug fixes. * Version 1.0.6 =============== - Port to PowerPC - Add more reflection hooks. * Version 1.0.5 =============== - Port to ia64. - Minor bug fixes. * Version 1.0.4 =============== - Work around the libffi header bug by defining new configure macros. - Implement _svmf_iflush() for processors with distinct data and instruction caches. - Minor bug fixes. * Version 1.0.3 =============== - Fixed configure.ac to select an inline-threaded interpreter engine by default on i*86. The 1.0.2 version was erroneously defaulting to a slower direct-threaded engine. - Collect some additional interesting statistics (when STATISTICS is defined in configure.ac, of course). * Version 1.0.2 =============== - SableVM is ported to the Alpha 64 bits architecture, thanks to the effort of Grzegorz Prokopski . It took him 24 hours, and the "diff" size was 25 lines. :-) What port is next? - Some of the few holes left in JNI and in reflection native code have been filled. * Version 1.0.1 =============== - SableVM now waits until all non-daemon threads are died before quitting. - SableVM is now known to run all SPECjvm98 benchmarks, SableCC 2.17.3, and Soot 1.2.3. - Convenient build scripts have been added. * Version 1.0.0 =============== - Threaded interpreter engine in three flavors: - inline threaded (Requires GNU C) - direct threaded (Requires GNU C) - switch threaded (pure ISO C + POSIX) - Two-word object header. ("java.lang.Object" instances are 2 words long, including the hashcode, the lock, the vtable, and additional bits). - Two flavors of object layout: bidirection and traditional. - The bidirectional object layout allows for tracing an object, at GC time, without accessing any data outside the object (vtable, type structure), in most cases. Best effort has been made in the traditional layout to minimize external access. - Precise stop-the-world copying garbage collector. Heap parameters are specifiable on the command-line (properties). - Stop-the-world uses regular non-atomic check operations (except around native calls). Threads running native code are considered "stopped" from the VM's point of view. - Minimization of regular checks by only applying them on back jumps to basic blocks that do not include operations like "new", and "invoke*", which already contain a check. - Efficient locals map data-flow analysis which works in presence of arbitrarily complex jsr / exception mix. - Space efficient stack and local GC maps. - Constant time access to the current stack and local GC map for every frame on the Java stack. - Grow-on-need Java stack size, with command-line (properties) specifiable parameters. - Grow-on-need class-loader memory management, with command-line (properties) specifiable parameters. - "invokeinterface" at the speed of "invokevirtual", using sparse interface vtables without memory loss. Holes in the vtables are recycled on a class-loader basis for storing other data. - Thin locks without spin-locking in case of contention. - A choice of explicit or signal based null checks. Signal based checks cost 0 processor cycles on success, but can be expensive in case of exceptions. Also, signal based check increase the cost of native->Java method invocation (the cost of a "siglongjmp"). - Java based "application class loader" (or system class loader), which allows for putting .jar files on the classpath. - Support for Runtime.traceInstructions/traceMethodCalls in the debugging version of the interpreter. - Easily readable/debuggable code, using explicitly generated commented source files for repetitive code. This is done using a set of simple-to-use m4 macros that can be conveniently hidden in C code (allowing automatic tools like "indent" to work). No need to understand m4 for reading the VM's source code (except if you want to look at .m4[.*] files, which is not necessary). - Licensed under the terms of the GNU Lesser General Public License (LGPL). - And more, for your pleasure!