Aegis VM Features Map This file documents the JVM features available in this release of Aegis VM. It also contains a list of features planned but not yet implemented. This file is best viewed in emacs outline mode. * Custom Features ** Pluggable Verification Modules ** Pluggable Obligation Libraries * VM Internal ** Implemented VM features *** class definition, preparation, resolution, initialization *** support for boolean, byte, char, short, int, long, float, double, objects *** support for arrays, strings and wrapper objects for primitive types *** exception handling and stack tracing *** garbage collection *** user-defined classloader and class unloading *** dynamic loading of native libraries *** JNI support *** access control *** loading constraints *** reflection *** bytecode verification ** Planned VM features *** support for jar/zip archives *** threading *** security framework *** weak references *** object finalization * Bytecode Support for all bytecode instructions implemented except for monitorenter and monitorexit. Currently, the VM will only pop the reference operand of monitorenter and monitorexit without actually performing any synchronizing it. Therefore, single-threaded Java applications should have no problem with this setup. * JNI We aim to strive first for JNI 1.2 compliance. Currently, jni.h only provides C support but not C++ support. ** Implemented JNI functions *** JNI_CreateJavaVM (no support for standard options & 1.1 style vm_args) *** DestroyJavaVM *** FindClass *** GetSuperclass *** IsAssignableFrom *** Throw *** ThrowNew *** ExceptionOccurred *** ExceptionCheck *** ExceptionDescribe *** ExceptionClear *** ExceptionOccurred *** ExceptionDescribe *** DeleteLocalRef *** NewLocalRef *** EnsureLocalCapacity *** PushLocalFrame *** PopLocalFrame *** AllocObject *** NewObject/V *** GetObjectClass *** IsInstanceOf *** IsSameObject *** GetStaticFieldID *** GetStatic(Type)Field *** SetStatic(Type)Field *** GetFieldID *** Get(Type)Field *** Set(Type)Field *** GetStaticMethodID *** CallStatic(Type)Method/V/A *** CallStatic(Type)Method/V/A *** GetMethodID *** Call(Type)Method/V/A *** CallNonvirtual(Type)Method/V/A *** GetArrayLength *** NewObjectArray *** SetObjectArrayElement *** NewStringUTF *** GetStringUTFLength *** GetStringUTFChars *** ReleaseStringUTFChars *** RegisterNatives *** UnregisterNatives *** GetJavaVM *** Get(Type)ArrayElements *** Release(Type)ArrayElements *** JNI_OnLoad *** JNI_OnUnload ** Planned JNI functions *** JNI_CreateJavaVM (support for standard options & 1.1 style vm_args) *** JNI_GetDefaultJavaVMInitArgs *** JNI_GetCreatedJavaVMs *** AttachCurrentThread *** DetachCurrentThread *** GetEnv *** GetVersion *** DefineClass *** FatalError *** NewGlobalRef *** DeleteGlobalRef *** NewWeakGlobalRef *** DeleteWeakGlobalRef *** NewObjectA *** NewString *** GetStringLength *** GetStringChars *** ReleaseStringChars *** GetStringCritical *** ReleaseStringCritical *** GetStringRegion *** GetStringUTFRegion *** New(Type)Array *** GetObjectArrayElement *** Get(Type)ArrayRegion *** Set(Type)ArrayRegion *** GetPrimitiveArrayCritical *** ReleasePrimitiveArrayCritical *** MonitorEnter *** MonitorExit *** FromReflectedField *** FromReflectedMethod *** ToReflectedField *** ToReflectedMethod * Class Library We plan to strive first for J2SE 1.3 compliance. The Aegis VM will not supply a full implementation of the standard Java platform class library. Instead, we will make use of third- party class libraries. Currently, the Aegis VM interoperates with the GNU Classpath class library. Some classes in the Java platform class library requires support from the VM. These "built-in" classes come from java.lang, java.lang.ref, and java.lang.reflect. Examples include java.lang.Object, java.lang.Class, and java.lang.ClassLoader. The Aegis VM will need to supply implementation for these classes. However, classes from within the same packages are usually not completely encapsulated from each other. Therefore, if we are to remain neutural to the choice of third-party class library, we will have to implement all classes from that packages that contain built-in classes. That is to say, we will supply all classes from java.lang, java.lang.ref, and java.lang.reflect. ** java.lang *** Fully 1.3 compliant classes **** All exception and error classes **** All interfaces **** Boolean **** Byte **** Character.Subset **** Character.UnicodeBlock **** Compiler **** Integer **** Long **** Math **** Number **** Process **** RuntimePermission **** Short **** String **** StringBuffer **** Throwable **** Void *** Almost 1.3 compliant **** Character The following methods only handle ASCII input: toLowerCase, toUpperCase, toTitleCase, digit. The following function is not implemented yet: getNumericValue. **** Double Conversion between Double and String is still not robust. **** Float Conversion between Float and String is still not robust. *** Partly functional **** Object Missing the notify and wait methods **** Runtime Missing exit(), addShutdownHook(Thread), removeShutdownHook(), halt(), the 6 exec methods, freeMemory(), totalMemory(), runFinalization(). **** SecurityManager It always grant access. **** StrictMath Delegates to Math. **** System Missing setIn, setOut, setErr, exit, runFinalization. *** Pure stubs **** InheritableThreadLocal **** Package **** SecurityManager **** Thread **** ThreadLocal ** java.lang.ref Empty stubs. ** java.lang.reflect Almost 1.3 compliant, except for the missing Proxy class and accessibility checks.