JamVM 1.3.1 review

by rbytes.net on

JamVM is a new Java Virtual Machine which conforms to the JVM specification version 2 (blue book)

License: GPL (GNU General Public License)
File size: 0K
Developer: Rob Lougher
0 stars award from rbytes.net

JamVM is a new Java Virtual Machine which conforms to the JVM specification version 2 (blue book). In comparison to most other VM's (free and commercial) it is extremely small, with a stripped executable on PowerPC of only ~130K, and Intel 100K.

However, unlike other small VMs (e.g. KVM) it is designed to support the full specification, and includes support for object finalisation, the Java Native Interface (JNI) and the Reflection API.

Here are some key features of "JamVM":
Uses native threading (posix threads). Full thread implementation including Thread.interrupt()
Object references are direct pointers (i.e. no handles)
Supports class loaders
Efficient thin locks for fast locking in uncontended cases (the majority of locking) without using spin-locking
Two word object header to minimise heap overhead (lock word and class pointer)
Execution engine supports basic switched interpreter and threaded interpreter, to minimise dispatch overhead (requires gcc value labels)
Stop-the-world mark and sweep garbage collector
Thread suspension uses signals to reduce suspend latency and improve performance (no suspension checks during normal execution)
Full object finalisation support within the garbage collector (with finaliser thread)
Garbage collector can run synchronously or asynchronously within its own thread
String constants within class files are stored in hash table to minimise class data overhead (string constants shared between all classes)
Supports JNI and dynamic loading for use with standard libraries
Uses its own lightweight native interface for internal native methods without overhead of JNI
JamVM is written in C, with a small amount of platform dependent assembler, and is easily portable to other architectures.

What's New in This Release:
Re-worked thread suspension enable/disable code
implemented a fast enable/disable suspend mechanism for critical code sections, which is now used in hash table access and heap allocation :
much faster object allocation
much faster primitive array allocation
faster string interning
removed some minor potential (as yet unseen) race conditions
Integrated all outstanding patches
generics branch patch, implementing VMClass.isEnum(), isAnnotation() and isSynthetic()
Boot library path patch (support for system property gnu.classpath.boot.library.path)
Enabled different min/max heap values for each architecture
ARM values are back to the defaults for JamVM 1.2.5. Default max heap of 128Mb is too large for typical embedded ARM systems.
Fixed the new compiler warnings from gcc-4.0 (under Mac OS X) related to char/signed char usage.
Fixed compiler error on gcc-4.0 under Mac OS X 10.4 (duplicate definitions of wait).
Fixed rare, potential dead-lock in direct.c when preparing methods
Fixed a bug in VMClassLoader.defineClass(), where offset or length is wrong.
Fixed bug in DCONST_1 on mixed-endian ARM architectures (this bug was fixed in JamVM 1.2.2 but it crept back in, due to the new interpreter in JamVM 1.2.5).
Improved thread dump (produced via SIGQUIT, or ctrl-).
Several other minor bug-fixes, and code tidy-ups.

JamVM 1.3.1 keywords