| JamaicaVM 3.2 — User Documentation: The Virtual Machine for Realtime and Embedded Systems | ||
|---|---|---|
| Prev | Preface | Next |
This section lists changes in the JamaicaVM since version 3.0 in chronological order.
fix JB01118: Error 10035 in Windows CE network communication
support for CRIS architecture (Linux)
support for Linux hosted QNX 6.3
fixed JB01116: ORB cannot be instantiated
fixed JB1114: Deadlock between ResourceBundle.getBundle and class loading. Now, ResourceBundle.getBundle() no longer holds a lock while loading a bundle, and the VM no longer holds a lock while loading class data from an archive.
new Java properties jamaica.out_to_file and jamaica.err_to_file. If a property is set to a file name, all output sent to System.out or System.err, respectively, is redirected to this file.
force MOUSE_EXITED and MOUSE_ENTERED events on touch screens
fix JB01101: Creation of multidimensional arrays via reflection fails
support for PikeOS 2.2 (x86)
fix JB01110: NullPointerException in Class.getProtectionDomain()
support for Linux PowerPC 85xx (Freescale PowerQUICC III)
fix problems with JNI methods introduced in 27
On systems without ELF support like Windows CE and OS-9, the class and resource data are split up into several files. This significantly increases the build time for large applications on these systems.
nativeStackSize=0 uses system default and doesn't do stack size check for native stack.
new architecture pentium4 that uses sse2 floating point operation that is both faster and more correct than the 387 unit
new option for jamaicah. -callingStubs. For non x86 archs it was not possible to call native methods that were not available at application build time. With this option you can generate a c file that, if linked to your jni shared library, enables us to do this. But be sure to make the application's symbols available for shared library, because we make callbacks from the stub in the shared library into the application. The flag for gcc is -Wl,-E or -rdynamic. Note: This is not needed for native code known at application build time and never needed on x86.
new -setLibraies options:
security=on|off [on] Removes security handler code dependencies especially crypto code. CAUTION: only use this when you are running trustet code.
charsetprovider=minimal|all [all] Replaces the regular charset provider with a version that only supports the US-ASCII, ISO-8859-1, and UTF-8 charsets.
logger=on|off [on] Avoids most of the dependencies that are due to logging.
vmServices=on|off [on] Removes dependencies that are due to the signal handlers or the scheduler event thread. (It removes System.initOptional)
improved smart linking: Classes referenced as class constants (XXX.class) no longer have automatically all their fields and methods included. Only if the class constant is the only reference and one of its implemented interfaces is initialized the class gets treated as instantiated. The old implementation was not correct in that respect.
revalidate JTable if the entire table changed
fix JB01095: Implementation of Class.getSimpleName() method
fixed JB1090: Compilation of synchronized methods with that contain a loop could cause the the monitor to be entered multiple times resulting in deadlocks or IllegalMonitorStateExceptions.
fixed JB1092: Enum.getDeclaringClass() does not return the correct class
add support for dynamic libraries on vworks rtp on sh4
implemented full support for JNI invocation API functions JNI_AttachCurrentThread, JNI_AttachCurrentThreadAsDaemon and JNI_DetachCurrentThread. Attaching a thread requires allocation of a thread structure, which may fail due to memory fragmentation. New Builder options -numJniAttachableThreads and -numJniAttachableThreadsFromEnv can be used to ensure that sufficient threads are pre-allocated. The total number of Java threads and JNI attachable threads is limited by the maximum number of threads supported by JamaicaVM, currently this is 511.
fixed JB1083: faster method table initialisation for classes with many declared or inherited virtual methods.
fix writing of 0 bytes to SSLSocket that causes problems with MSSQLServer
fix JB01085: Transparent images are painted opaque (nano-X)
fix JB01086: JNI method can not always be linked if a none-native method with the same name exists
new options for vm and builder: -ea and -enableassertions that enable assertions for all classes. default is no assertions
do not complain if an Exception declared thrown is not found when loading a class
fix repaint problem if AWT backbuffer is used in window peer
read of 0 bytes on socket must return 0
fix problem with NoHeapRealtimeThreads without a Thread Group throwing MemoryAccessError when -strictRTSJ is set.
fix charset provider
workaround for bug in file io in nfs on vxworks 6.4
mark classes in profile as used via reflection if used by several jni methods
version string now conforms to the specification and returns 1.5.0
default graphic system is set for host if available (Linux)
fix JB01087: libraries declared as static are linked dynamically
fix elf format for sh4 processor
use native fonts and font mapping per default on Windows CE
on Linux with kernel below 2.5 a thread yield calls a thread sleep because of misbehavior in the scheduler queue
Set default initial number of used Java threads to 8.
fix charset Provider causing problems when connecting to mysql server
fix JB01074: if a subclass of ThreadGroup is used the JVMTI debugger can not find appropriate fields in the class
Improvement of JNI AttachCurrentThread(). Still under development.
call JNI_OnLoad if jni library is loaded for example through System.loadLibrary
new -XlinkStatic=implicit argument allows to link all the libraries the compiler implicitly links statically. That means for the gcc compiler that -Wl,-Bstatic is added as last argument. Without "implicit" -Wl,-Bdynamic is added to link them dynamically.
reduced call overhead from compiled code to JNI native code (call overhead is now approx. 100 machine cycles (on x86)).
builder does not exit if a class used via reflection in profile is not found at build-time, only a warning is printed.
better handling for native methods in java code without implementation present at build time
fix networking for vxworks 6.5
Support for QNX 6.3 ARM
fix JB01066: System.nanoTime is now implemented on systems with CPU cycle counter support.
fix JB01058: formatting of DecimalFormat with exponent returns wrong number
Support for PCF fonts
Support for Jamaica internal font format (JCF)
extended builder option -XdefinePropertyFromEnv to permit specifying two names, the property name and the environment variable name. Now, when setting, e.g, -XdefinePropertyFromEnv="jamaica.jit=JIT", the built application can be started with "JIT=<blabla> ./application" to set the property "jamaica.jit" to the contents of the environment variable "JIT".
added JIT compiler interface for optional JIT support.
fix JB01050: jar/zip file in bootclasspath caused segfault for jamaicavm* commands.
Support for setSoTimeout on OS-9
improve SSL performance by native implementation of Rijndael.aesDecrypt
improve SSL performance by native implementation of Sha160 and Sha256
fix #JB01040: loading of sealed jars failed
fix JB01039: endless loop when using 4096 RSA keys
fix memory leak in native code of ZipFile.read
Use java/util/zip from openjdk
set pthread name if supported. The jamaica thread id is part of the name and you can get the thread id with com.aicas.jamaica.lang.Debug.getThreadId(thread) fixed JB01022: recv on vxworks 5.5 does not respect RCVTIMEO used by Socket.setSoTimeout. Implement timeout with select.
Use java/math from openjdk. This will speed up SSL for instance.
Fixes for encryption/decryption with CipherInputStream and CipherOutputStream.
Fixes another Bug in BufferedReader that caused problems with SSL (broken pipe)
The socket option SO_REUSEADDR had been set before the call of bind. So it was always used and could not be disabled. This was an violation of the java api. Now Socket does not touch SO_REUSEADDR any longer, but ServerSocket has it enabled by default. If you want to enable/disable this feature for Sockets/ServerSockets one can now call setReuseAddress prior to binding the Socket to an address. The standard usage of Socket/ServerSocket will show the same behaviour as before. The few cases affected will show an "Address Already in Use" if one tries to bind to an address where a Socket in the state TIME_WAIT is bound to. One has either to wait for the timeout or to call setReuseAddress prior to bind.
make POSIXSignalHandler able to handle fatal signals, so one can do some actions like shutting down the System cleanly if a segfault occures
improve SSL performance and fix broken pipe caused by wrong eol handling
High resolution counter for OS-9 (PowerPC) to simulate CPU cycle counter and to enable correct usage of the ThreadMonitor tool
Extended profiling data by information on all threads that are active at the time the profile is written. For each thread, a line of the form
PROFILE_THREAD: pri:5 cycles:1928189840 (81.0% interpr 18.9% comp 0.0% JNI 8.3% GC) Stack: C 26201 Java 1236 main
is printed to the profiling file. The values given are as follows:
pri -- the Java priority, a micro adjustment may be indicated via "+" or "-" (see class com.aicas.jamaica.lang.Scheduler)
cycles -- on systems that hava a CPU cycle counter, the number of cycles this thread has used. In paranthesises, the percentage spent in the interpreter, compiled (or internal) code and JNI code will be given. Also, the time needed for GC activity is given. Note that the GC figure is orthogonal to the other three: Time spent in GC will also be accounted to interpreter or compiler, depending on where the GC activation came from.
Stack -- The measured C and Java stack usage in bytes.
<name> -- the Java name of the thread.
New options -stopTheWorldGC and -atomicGC. Both enable a blocking GC that does starts work only when the application ran out of heap memory. -stopTheWorldGC blocks all threads that perform heap allocation, but it permits non-allocating threads to continue execution. In contrast, -atomicGC fully stops all threads during GC work, including RealtimeThreads and NoHeapRealtimeThreads.
New default compilation behaviour: If neither -compile nor -useProfile is set, the default behaviour is that a default profile (<Jamaica>/target/<target>/prof/sysclasses.prof) will be used for the compilation of all boot classes, and all application classes will be fully compiled. A new option, -interpret, disables this default behaviour in favor of a fully interpreted application.
combination of options -compile and -useProfile is not permitted. If both options are specified, all built-in methods will be compiled and the information from the profile will be used for optimizations such as inlining decisions.
Network support for QNX 6.3
Support for PikeOS 2.1
Check access to profile file at startup of the VM when profiling
Option -file=<filename> for class com.aicas.jamaica.lang.Profile to specify the name of the profile file on the target system
New option -XprofileFilenameFromEnv for the builder. The name of the profile file can be specified via environment variable. Only valid with -profile Option. You can use the environment variable JAMAICAVM_PROFILEFILENAME for the jamaicavmp command.
jamaicavm -version now prints "java version 1.4.2" like jdk does. This is use by ant.
set the default value of some properties: file.encoding = "ISO-8859-1" if the $TEMPDIR environment variable is set: java.io.tmpdir = $TEMPDIR else java.io.tmpdir = "/tmp"
New option -excludeJAR for the builder. Forces the exclusion of all classes and resources contained in this archive file or directory. Any class and resource found will be excluded from the created application. Use this option to load an entire archive at runtime.
New option -excludeClasses for the builder. Forces the exclusion of the listed classes and packages from the application. The listed classes with all their methods and fields will be excluded, even if they were previously included using -includeJAR or -includeClasses.
Provided access to the Jamaica scheduler behaviour via class com.aicas.jamaica.lang.Scheduler with the methods maxNonStrictPriority, maxIgnorePriority, useStrictPriority, and microAdjustPriority.
RTSJ system services now run at priority effectively higher than PriorityScheduler.instance().getMaxPriority().
Reduced overhead of GC for burst allocations by a low priority thread that performs garbage collection work to reserve memory. New Builder options -reservedMemory and -reservedMemoryFromEnv to set the percentage of memory that shall be reserved by the reservation thread.
The overall effect is that bursts of allocations up to the amount of reserved memory that follow a pause in activity that was long enough to perform this allocation will require no GC work to perform the allocation. However, any thread that performs more allocation than the amount of memory that is currently reserved will fall back to the performing GC work at allocation time.
The disadvantage of using reserved memory is that the worst-case GC work that is required per unit of allocation becomes larger the larger the amount of reserved memory becomes.
Reduced Java stack requirement by one slot per active method frame. An application with the maximum stack usage at a point with n nested calls will no work with a Java stack that is 4*n bytes smaller.
Improved Jamaica scheduler: RTSJ realtime priorities for pure Java code are now respected even on non-realtime OSes such as Linux. However, native code called via JNI is under the control of the OS which may permit lower priority threads to run.
New method com.aicas.jamaica.lang.Debug.showReachability(Class) to show the reachability of all instances of a given class. This is useful for debugging a memory leak if a certain object's memory is not reclaimed and it is not clear why this object is considered reachable by the GC.
On Windows the external MinGW package do not have to be installed anymore. Jamaica now includes a copy of MinGW.
On Windows the external pthread library is not needed anymore. Jamaica uses now the Windows native thread API.