8.1 (Release 7)

  • The CA certificates have been updated.

  • Fix JAM-5646: Setting JAMAICAVM_LOCK_MEMORY for a VM that does not have the privilege for locking the memory causes a segmentation fault during start-up phase. This also affects the Builder option -lockMemory.

  • Fix JAM-5689: Error in the DFA optimization performed by the rule-based compiler. More specifically, some of these optimizations might incorrectly decide whether a float is greater than another (or whether a float is less or equal than another). This error might cause the generation of incorrect code.

  • Fix JAM-4412: Java code compiled to machine code with the rule-based compiler may fail to distinguish the floating point values +0 and -0 where they occur as constants. This includes the code of the standard math library.

8.1 (Release 6)

  • Fix JAM-5627: Error in the DFA optimization performed by the rule-based compiler. More specifically, the error affected the optimization of some integer and long values and could result in the generation of incorrect code.

  • Fix JAM-5626: Sporadic segmentation fault when using an accelerated JAR. The problem was caused by a race condition in the number of users using the JAR.

  • Fix JAM-5620: JAR Accelerator creates shared libraries with the same name. The policy for generating the libraries name was improved.

  • Fix JAM-5576: Module Loader may cause incorrect code to be executed. The precision of updates of extracted libraries containing accelerated code was seconds instead of milliseconds.

  • Fix JAM-5470: Builder fails with "java.lang.Error: require-condition 1 failed!" due to incorrect detection of the return type of some signature polymorphic methods.

  • Fix JAM-5176: Possible bitshift overflow warnings when compiling code generated by the builder with newer GCC and Clang versions.

  • Fix JAM-5509: The Java system property 'user.home' is set using 'getpwuid()' on POSIX systems. If that fails, the environment variable 'HOME' is used to set it. If that fails too, 'user.home' is set to '?'. The same applies to the Java system property 'user.name' and the environment variable 'LOGNAME'.

  • Fix JAM-5612: The VM used twice as much RAM as the value specified in JAMAICAVM_HEAPSIZE. QNX 6.6 and above are affected.

  • Fix JAM-5566: Dynamic thread creation leads to SIGSEGV in low memory conditions.

  • User documentation includes a list of known issues in addition to the list of unsupported features. See file 'KNOWN_ISSUES' in the 'doc' folder.

  • Fix JAM-5607: JNI AttachCurrentThread from an unattached native thread could result in a segmentation fault.

  • Fix JAM-5613: Running the VM with a user-defined thread priority mapping could lead to an invalid memory access.

  • Fix JAM-5312: A race condition has been fixed that can lead to deadlocks in heavily multi-threaded applications on the multicore VM.

  • Fix JAM-2664 and JAM-5348: On QNX, an instance of JamaicaVM could be blocked by another process running at the same priority. The reason is a limitation in QNX’s priority inheritance for mutexes resulting in priority inversion (a low priority thread can hold a mutex while a high priority thread tries to enter it). Jamaica’s scheduler avoids this problem by explictly boosting the priority of the thread owning the mutex until it is released.

  • Fix JAM-5565: Wrong code generated for interface methods.

  • Jamaica for VxWorks 7 on ARMv7 and x86_64 is now based on the SR0520 release.

  • Jamaica for QNX 6.5 and 6.6 on ARMv7 is now compiled with the -mfloat-abi=softfp compiler option to emit floating point instructions where possible.

  • Fix JAM-3926: Jamaica’s handling of subnormal floating point values on QNX 6.5 and 6.6 on ARMv7 is now compliant with IEEE 754.

  • Fix JAM-5485: Only English locale related classes are automatically included by the Builder.

  • Fix JAM-5477: Starting the VM with a very small heap size (e.g., -Xms64k -Xmx64k) could result in a segmentation fault.

  • Fix JAM-5484: Failed assertion when executing code generated by the builder for some "ldc" bytecode (related to JAM-5432 and JAM-5433).

  • Fix JAM-5488: Missing class reported when -setLocales=all is set. The Builder dependencies to the internal "SerializerMessages" class have been corrected.

8.1 (Release 5)

  • Fix JAM-5396: A race condition affects the read operation of TCP sockets' InputStream: multiple threads reading from the same InputStream could result in blocking indefinitly or in SocketTimeoutException "java.net.SocketTimeoutException: Read timed out".

  • Fix JAM-5347: An ArrayIndexOutOfBoundException was thrown when the "Navigate" → "Go To…​" menu was selected in JamaicaTrace.

  • Fix JAM-5388: Leaving an IPv6 multicast group that was joined using the default interface failed on QNX. The affected methods are:

    • MulticastSocket.joinGroup(InetAddress mcastaddr)

    • MulticastSocket.leaveGroup(InetAddress mcastaddr)

  • Fix JAM-5414: Previously, on QNX, the IPv6 address of the local network interfaces as returned by the kernel had the scope ID embedded in it. The IPv6 address of the local interface is now fixed, the method NetworkInterface.getInetAddresses() is affected.

  • JAM-4632: New Feature: Datagram communication using IPv4-mapped IPv6 addresses is now supported on QNX 7.

  • The used versions of third-party libraries (OpenJDK, libffi, FreeType) are documented. The information can be found in the 'build.info' file (JAM-5372).

  • Fix JAM-4877: Due to using fused multiply-add operations on AARCH64 systems, the results of some java.lang.StrictMath operations were slightly incorrect with respects to IEEE 754 due to skipping one of the two required rounding steps.

  • Fix JAM-5432 and JAM-5433: The Jamaica Builder can not compile the "ldc" bytecode used for loading reference to a method type or a method handle.

  • Fix JAM-5428: The default primap on QNX is changed so Non-RTSJ Java threads are now scheduled with SCHED_OTHER as the scheduling policy for built applications. This is changed to avoid starvation of normal Java threads.

  • Fix JAM-5460: Executing code that was compiled by the JARAccelerator in a finalize() method could result in a crash of the VM in case the ClassLoader that loaded this compiled code was finalized before.

  • Fix JAM-5415: XML Schema cannot be created in built application. The Builder dependencies upon required classes and resources were missing in compact2 configurations.

  • Fix JAM-5393: The Jamaica Builder’s smart linker had several problems with virtual and interface calls: If a called interface method was implemented by a Java 8 default method in a sub-interface, the smart linker would not include this default method. Also, the smart linker could remove methods that are required since they override a method that is called in case unrelated (static, private, etc.) methods with same name and type existed in the inheritance chain. For built applications, this could result in either the wrong method being called at runtime or an AbstractMethodError being thrown on a virtual or interface call.

  • Fix JAM-5317: Allocating native memory (via ByteBuffer.allocateDirect(), java.awt.Window.pack(), etc.) could segfault in low memory situations. This was addressed by improved error handling of java internal API Unsafe.allocateMemory().

  • Fix JAM-5352: Resources located in a directory on the file system and not in a JAR file have not been built in on Windows hosted systems.

  • JAM-5300: The property sun.nio.ch.bugLevel is no longer supported and thereby is ignored.

  • Fix JAM-3076: Changed the path separator character on VxWorks from ':' to ';' as it should be. Since ':' is a valid character for a path on VxWorks, a given path including ':' was interpreted as two paths.

  • Fix JAM-4968: When restricting threads to specific (logical) CPUs via the RTSJ affinity API in the multicore VM, the affinity change was only reflected upon the next rescheduling of the thread. This was changed to be effective immediately.

  • Fix JAM-5333: When using dynamically increasing heap sizes, after a heap size increment, the GC temporarily performed too little progress, potentially resulting in unreachable memory not being freed quickly enough. Large heap size increments (about 32 times bigger than the initial heap size) would result in a floating point exception and immediate termination of the VM.

  • Added support for Java WatchService on VxWorks using periodic polling as the native file systems do not provide file change notification facilities (JAM-4764).

  • Fix JAM-4878: The Builder option -XobjectFormat=default did not work on Windows hosts.

  • The Jamaica Builder fully includes classes if they are listed using the option -includeClasses, or if they are used via reflection detected in a profile or due to a Builder dependency of the form <class>.*. Now, fully including a class (recursively) causes full inclusion of its inner classes as well. This fixes several potential issues due to missing inner classes (JAM-2325).

  • Fix JAM-5283: Fixed NoSuchAlgorithmException when using an SHA-256 MessageDigest in a built application since the Builder dependencies now include algorithms that are declared in inner classes of sun.security.provider.SHA.

8.1 (Release 4)

  • The CA certificates have been updated.

  • Fix JAM-4984: On targets that use priority boosting as described in the Priority Boosting subsection of the manual, a thread that blocks with a timeout (via Object.wait(), Unsafe.park(), etc.) now gets its priority boosted to the next native priority.

  • JamaicaVM currently supports the Java Platform, Standard Edition, up to the compact2 profile only (JAM-4754). This was made clear in the API specification (javadoc) and the UNSUPPORTED file.

  • Fix JAM-5195: Deprecated Debug.native_print(String format, int/float) functions and changed the implementation to ignore the format argument. This avoids potential crashes with format strings that do not match the arguments.

  • Properties that control profiling, e.g. 'jamaica.profile_request_port', that are accidentally set when using a non-profiling VM, could have lead to unexpected behavior. Now a non-profiling VM is terminated at initialization, clarifying that the operation is unsupported (JAM-2644).

  • Fixed an issue that prevented finding JRE files included in the Jamaica executable when using NFS on VxWorks. This was addressed by improved error checking of the stat() function (JAM-5236).

  • Fix JAM-5269: Worst-case execution time of an allocation could be arbitrarily large if many active weak/soft/final/phantom references were present.

  • Fix JAM-5188: The MD5 implementation is now automatically included by the Builder when a MessageDigest is used. This algorithm must be supported.

  • Fix JAM-5256: Improve robustness of java.security.AccessController in low memory situations.

  • JAM-5169: Fixed potential native output buffer overflow in the internal com.aicas.jamaica.lang.Debug.print functions.

8.1 (Release 3)

  • Fix JAM-5022: A thread selecting on a channel while another thread closes this channel can cause sporadic "bad file descriptor" errors.

  • Fix JAM-5214: The default primap on VxWorks is changed so Non-RTSJ Java threads are now scheduled with Round-Robin as the scheduling policy. This is changed to avoid starvation of normal java threads.

  • JAM-4966: On QNX, an implementation of the NIO SelectorProvider based on the POSIX poll() function is now used. This change is motivated by fixing previous Select behavior where it could throw an unexpected IO Exception "Interrupted function call". Nevertheless, it has some limitations that were documented in the user manual under QNX section.

  • Jamaica is now based on standard classes of OpenJDK version jdk8u131-b11.

  • Fix JAM-5047: Building an application using option -profile could result in an internal error at runtime if a built-in class had no line number table.

8.1 (Release 2)

  • The CA certificates have been updated.

  • Support for Linux on AARCH64.

  • Fix JAM-4782: Add support for FileChannel.lock() on VxWorks.

  • Fix JAM-5030: For synchronized native methods built in by the Jamaica Builder, synchronization was missing causing race conditions in code that seemed properly synchronized.

  • Fix JAM-3088: Visual Studio linker fails when linking huge object files created by Jamaica Builder.

  • Fix JAM-4625: Add support for NetworkInterface.getHardwareAddress() on VxWorks.

  • Fix JAM-4848: Multiple occurrences of command line options -Xbootclasspath/a and -Xbootclasspath/p are now concatenated in compliance with JDK behavior.

8.1 (Release 1)

  • Fix JAM-4925: Fix setting thread names on QNX. This was caused by concurrent access to the file descriptor of the process.

  • Fix JAM-4921: Use the shared library sunec in the Personal Edition of Jamaica.

  • Fix JAM-4926: Increase ExamplesNativeStackSize for Linux targets.

  • Fix JAM-4815: Accelerating a signed JAR breaks the signature of the accelerated JAR.

  • Fix JAM-4823: VM shutdown could result in a deadlock while executing shutdown hook (e.g., when terminating the Jetty web server via control-C).

  • Fix JAM-4810: Interfaces with default methods with MethodParameters attribute (as used by Scala 2.12) could cause a VM crash during class loading.

  • Fix JAM-4806: Add parsing of VM options -XX:+UseG1GC and -XX:+UseStringDeduplication. These are ignored and cause a warning.

  • Fix JAM-4801: Interrupting a thread T by throwing RTSJ’s Asynchronously- InterruptedException could result in T hanging in endless loop.

8.1 (beta)

  • Fix JAM-4925: Fix setting thread names on QNX. This was caused by concurrent access to the file descriptor of the process.

  • Fix JAM-4723: In the parallel VM, synchronization on objects allocated in ScopedMemory or StackedMemory could result in crashes once the memory area was exited.

  • The VM now implements the RTSJ 2 version of javax.realtime.HighResolutionTime, code that uses the RTSJ 1 version of it will have to be recompiled.

  • Reduced Builder and JAR Accelerator heap demand when processing a ZIP archive containing many profiles.

  • Fix JAM-4701: JAR Accelerator could not delete an existing destination JAR.

  • Fix JAM-4700: UnsatisfiedLinkError (symbol not found) thrown when trying to load JNI methods having a mangled name longer than 256 bytes.

  • Fix JAM-4657: Disallow -constGcWork/-atomicGC/-stopTheWorldGC in combination with -reservedMemory(FromEnv). Reserved memory can be allocated only if the default dynamic work-based GC is used. Therefore, if used with any other GC mode, a warning is shown now and the -reservedMemory option is set to 0.

  • Made Builder option -XnoRuntimeChecks an internal option. This option is inherently dangerous, its main use is for internal compiler optimizations.

  • JAM-4670: For 32-bit QNX, improved wait functions that delay for an absolute time to work beyond 19 Jan 2038 (until 7 Feb 2106).

  • The new VM property 'jamaica.profile_quiet_dump' enables suppressing profile status messages (JAM-4491).

  • CpuTime.getCpuTime() is deprecated as it was not designed to be a public API.

  • Fix AMS-656: VM crashes after UnsatisfiedLinkError thrown when loading code from an accelerated JAR.

  • Fix JAM-4668: Multicore VM could segfault in a low memory situation.

  • Fix JAM-4640: ModuleLoader throws IllegalArgumentException if CodeSource.getLocation() of classes loaded from a JAR returns a relative path.

  • The Jamaica C Compiler Ant Task has been extended to support sets of source files (JAM-4654).

  • Fix JAM-4653: compilerflags and linkerflags attributes of the respective Jamaica Ant Tasks were not usable.

  • Fix JAM-4633: A stack overflow during lookup of a field or method could result in a NoSuchMethodError or NoSuchFieldError instead of StackOverflowError.

  • Fix JAM-4644: On systems that do not provide the default random seed (file /dev/random on Unix-like systems or class sun.security.provider.NativeSeed- Generator on Windows), Jamaica no longer silently falls back to use sun.security.provider.SeedGenerator$ThreadedSeedGenerator since this mechanism may not provide sufficient entropy for cryptography.

    On these systems, a source of entropy must be provided by setting property 'java.security.egd' or entry 'securerandom.source' in '<target>/lib/java.security' to an URL that provides secure random numbers, or to 'class:<name>' to provide a class <name> that implements the interface 'sun.security.provider.SeedGenerator' and provides secure random numbers.

    For debugging purposes, class 'sun.security.provider.SeedGenerator$Threaded- SeedGenerator' may be used. However, this does not provide sufficient entropy and will render cryptography algorithms insecure.

  • Fix JAM-4614: The VM could throw an IOException with success message (Windows).

  • Fix JAM-4643: Possible deadlock in String.intern() during class linking.

  • Fix JAM-4535: Wrong code generated for synchronized methods with the SSA-based compiler.

  • Fix JAM-4610: Compiled code caused crashes on single-core VM when using more than 255 Java threads.

  • Fix JAM-4600: Fixed a special case of priority inversion when a higher priority thread is preempted a lower priority thread. Now, the lower priority thread’s priority is boosted temporarily to that of the higher priority thread instead of only to the next higher native priority.

  • Fix JAM-2481: The Jamaica Builder now supports building multiple resources with the same name into one application. In particular, it is now possible to include several MANIFEST.MF files that come from different jar files provided in the boot classpath or in the system (application) classpath. Note that absolute file paths are now built into the application. For more information, see the Builder option '-resource'.

  • Fix JAM-4599: Dynamically created additional VM threads did not start in the multicore VM if they were created from a thread with priority higher than the normal Java thread priority (5).

  • Jamaica is now based on standard classes of OpenJDK version jdk8u112-b16.

  • Fix JAM-2246: Setting a directory to read-only on Windows should always fail, as all directories have read and write access (since Windows XP).

  • JAM-2569: In the multicore VM, improve Java memory model conformance on object creation.

  • Fix JAM-4554: In the multicore VM, the synchronization thread is now also restricted to CPUs specified via -Xcpus.

  • Fix JAM-4541: Fix live-lock in multicore scheduler that could cause the VM to halt until the next time slice.

  • Fix JAM-4551: When terminating the VM, do not wait for the end of the current time slice, but preempt this timeslice and terminate the VM immediately.

  • Fix JAM-2814: When setting one of the Builder options -setFonts, -setLocales or -setProtocols to 'all', this was not replaced by all possible values for the option. The string 'all' has been used as font, locale or protocol name, respectively.

  • Fix JAM-4559: Failed assertion when calling getUptime() on RuntimeMXBean.

  • Fix JAM-3942: Fix setting of CPU affinities on QNX.

  • Avoid unnecessary priority boosting of current thread.

  • JAM-3464 and JAM-4459: the property "jamaica.jaraccelerator.debug" has been renamed to "jamaica.jaraccelerator.verbose" because it produces useful information for users that want to learn how libraries containing accelerated code are loaded at runtime. This property is now set to true in the acceleration example provided with the Jamaica distribution.

  • The VM now uses mmap() for allocating the Java heap on all Linux targets.

  • Fix JAM-4526: Class loading within ScopedMemory could corrupt class data resulting in crashes.

  • Fix JAM-4487: Methods in java.lang.Package did not provide the information from META-INF/MANIFEST.MF for classes from the boot class path.

  • Fix JAM-4476: For a RealtimeThread, all the deadline misses in the first release are now correctly handled in case of a missHandler is defined.

  • Fix JAM-4522: Warnings are printed that native methods cannot be found, though the methods (or classes) are passed to the -XloadJNIDynamic Builder option.

  • Fix JAM-4466: Parallel class loading using several threads to load the same class hierarchy with classes from different class loaders could result in a SEGFAULT.

  • Fix JAM-4432: Fix crash when calling Unsafe.object/staticFieldOffset(null).

  • Fix JAM-4439 and JAM-4008: Crashes and missing synchronization when using the (unsupported) Java management API.

  • The system property "os.arch" is "i386" on x86 targets.

  • Fix JAM-3838: VM could segfault instead of throwing proper exception (e.g. ClassNotFoundException), during constant pool resolution.

  • Fix JAM-4208: When a high priority thread with CPU affinity was started from a low priority thread, a priority inversion bug could lead to starvation of the high priority thread.

  • Fix JAM-4377: Ensure proper security checks for boot classes.

  • Fix JAM-4405: JamaicaTrace is very slow when displaying large traces. Large traces are now drawn quickly even when using a large scale, e.g., after selecting "Navigate/Fit Window" or "Navigate/Fit Width".

  • Fix JAM-4400: Thread running as least eligible thread causes thrashing with memory reservation thread. A thread that was set to be least eligible will cause poor performance due to frequent thread switches with the MemoryReservationThread if it allocates memory. This affects threads after a call to com.aicas.jamaica.lang.Scheduler.setLeastEligible(), which is done for threads with javax.realtime.ProcessingGroupParameters when in a cost overrun situation and boolean property jamaica.cost_enforcement is set.

  • Fix JAM-4383: Bytecode verifier was very slow when verifying certain classes with a large number of try/catch blocks with different local variables.

  • Fix JAM-4352: Property "javax.realtime.version" is set correctly to 1.0.2. Available Affinity methods from RTSJ 2.0 that are available already can be disabled by setting the property "javax.realtime.disable_new_rtsj_apis" to true.

  • Fix JAM-2267: The jamaicah tool now creates C header files for direct inner classes of the classes given as arguments to this tool.

  • JAM-4193: The full stack trace of all Java threads is now printed if the VM receives POSIX signal SIG_QUIT twice within 500ms.

  • Fix JAM-2068: Standard charset classes (sun.nio.cs.*) are now included automatically by the Builder tool.

  • Fix JAM-4165: In built applications, the VM no longer adds the current directory to the application class path. Property java.class.path is now unset for a built application instead of being "". It can, however, be set via the builder commands -XdefineProperty and -XdefinePropertyFromEnv. This fixes a potential security issue since built applications could load class files stored from the current directory or sub-directories.

  • Fix JAM-4015: MethodHandleNatives.getMembers() returned the wrong kind (JVM_REF_invokeSpecial) for private methods.

  • Fix JAM-4182: An assert failed in jamaicavmdb if JNI’s Get/Set<type>ArrayRegion was called with NULL as the array argument.

  • Fix JAM-4122: Calls to methods in java.lang.Compiler no longer result in an UnsupportedOperationException.

  • Jamaica now supports a configuration for Raspberry 2.

  • Fix JAM-4144: There was a leak of system memory when dynamic thread creation failed due to Java heap fragmentation. This could occur only when the maximum number of threads was larger than the initial number of threads and threads were added dynamically in a situation when the Java heap was fragmented. Repeated attempts to create additional threads resulted in unbounded system memory usage.

  • Fix JAM-4078: On QNX, for applications using com.aicas.jamaica.lang.CpuTime (which is the basis for cost budget measurment in the RTSJ), the CPU clock rating is now obtained from the OS, it is no longer measured. Hence, it is no longer required to set the property jamaica.cpu_mhz.

  • In an old internal native interface (Jamaica Binary Interface, JBI), macros JBI_THROW* and JAMAICA_JBI_COPY have been removed from the corresponding include file jbi.h. JBI is deprecated, jbi.h will be fully removed in a later release.

  • Add JAM-4078: new QNX cycle counter rate read feature A new feature has been added for the QNX systems, it allows to read the cycle counter rate (in KHz) of the hosting platform. This feature is now used to initialize the CPU_RATE constant in CpuTime class in case the OS is a QNX system.

  • Fix JAM-4058: waitForNextRelease in non-periodic RealtimeThread. The modification moves the invocation of 'activateMissAndOverrunHandlers()' method for the non-periodic RealtimeThread in the 'release()' method. This change is necessary because for non-periodic RealtimeThread the release time is only known when the 'release()' method is called.

  • Fix JAM-4123: A compiled synchronized method caused a crash if entering the monitor failed (e.g., due to a nest count overrun).

  • Support for Compact 2 Profile of the standard classes.

  • Fix JAM-3898: Graphics.drawImage() doesn’t handle background color and transparency.

  • Fix JAM-2515: InetAddress.getAllByName() returns duplicates.

  • Multiple small fixes in the RTSJ implementation.

  • Fix JAM-4072: Native thread names of JamaicaVM are sometimes corrupt on QNX.

  • Large file support on 32-bit systems.

  • Support for InetAddress.getCanonicalHostName() on QNX.

  • Support for IPv6 multicast on Linux.

  • Fix JAM-4117: Protect newly allocated object from GC while calling Finalizer.register(). This bug could result in the referenced memory being reclaimed and reused for other allocations.

  • Fix JAM-4110: Determination of GC start time (to be used by internal class sun.misc.GC.maxObjectInspetionAge) is no longer performed by the GC code itself, but by the ReferenceHandler thread. This avoids potential bad worst-case exectution times due to system calls to read the clock when performing GC work by any thread.

  • Fix JAM-3491: Several issues with respect to clocks have been fixed. JamaicaVM now internally distinguishes three clocks: realtime clock, standard clock and relative clock.

    The realtime clock javax.realtime.Clock.getRealtimeClock() is mapped to CLOCK_MONOTONIC on POSIX systems. Consequently, any RelativeTime or AbsoluteTime instances use this clock, as well as all services built upon these (RTSJ Timers, periodic RealtimeThreads, deadlines, etc.). At VM startup, the difference between this clock and the standard clock (used for System.currentTimeMillis()) is determined. This offset will be added to the milliseconds value of AbsoluteTime values. Consequently, AbsoluteTime equals the standard clock as long as the standard clock and the realtime clock remain in sync.

    For non-RTSJ code, absolute times relative to epoch (1st of January 1970) are managed by the standard clock. On POSIX systems, this clock is implemented using CLOCK_REALTIME. It may suffer from arbitrary jumps as a result of time or calendar changes. The standard clock is used for System.currentTimeMillis, java.time.Clock, java.util.Date, sun.misc.Unsafe.park() with an absolute time (package java.util.concurrent is based on this), etc.

    For non-RTSJ code, relative times are managed by the relative clock. On POSIX systems, this clock is selected via the Builder option -XuseMonotonicClock. The default (true) selects CLOCK_MONOTONIC, while false selects CLOCK_REALTIME. CLOCK_MONOTONIC is preferred since it usually does not jump abruptly. The relative clock is used for Object.wait, Thread.join, Thread.sleep, sun.misc.Unsafe.park() with a relative time (package java.util.concurrent is based on this), sun.misc.GC.maxObjectInspetionAge, and VM internal timeouts as for interrupting blocking I/O.

    In summary, JamaicaVM uses the following clocks:

    VM clock        POSIX implementation
    -----------------------------------
    realtime clock  CLOCK_MONOTONIC
    standard clock  CLOCK_REALTIME
    relative clock  CLOCK_MONOTONIC/CLOCK_REALTIME, dep. on -XuseMonotonicClock
  • Fix JAM-4107: Possible illegal monitor state if thread blocked in Object.wait() receives both a Thread.interrupt() and a Thread.notify().

  • Fix JAM-4098: Possible assertion failure when new GC cycle starts in debug VM.

  • Fix JAM-4081: Services such as ThreadPoolExecutor from package java.util.concurrent used to run in endless loops when interrupted via RTSJ’s javax.realtime.AsynchronouslyInterruptedException since this code is itself not asynchronously interruptible, but at places catches InterruptedExceptions in endless loops, which does not work for AsynchronouslyInterruptedException, which remains pending and will be thrown again on the next Object.wait or Unsafe.park. Now, this code throws an com.aicas.jamaica.lang.AsynchronouslyInterruptedError instead.

  • Fix JAM-4068: Fixed a failed assertion when running a large application built using the Builder with option -debug=true.

  • Fix JAM-4048: System.nanoTime() on POSIX systems now uses POSIX CLOCK_MONOTONIC (instead of CLOCK_REALTIME).

  • Fix JAM-4028: Added JNI function GetObjectRefType. JNI version has been set to JNI_VERSION_1_6. Support for JNI code in static libraries, which is required by JNI_VERSION_1_8, is still missing (JAM-4039).

  • Fix JAM-3869: Fixed several cases that should have resulted in an IncompatibleClassChangeError but that instead caused the VM to crash (e.g., invoking an abstract method via invokestatic).

  • Fix JAM-4017: Implement access checks for java.lang.invoke.MemberName resolution.

  • Fix JAM-4035, JAM-3916: Pipes created for java.lang.UNIXProcess caused IOExceptions when they were closed since they had not beed added to the VM internal resource handling.

  • Fix JAM-4030: Opening files via java.io.FileInputStream, java.io.FileOutput- Stream or java.io.RandomAccessFile resulted in a memory leak of 128 bytes per file on the Java heap.

  • Fix JAM-4029: Allocation of non-Java heap memory could break realtime behaviour: a short priority inversion could occur in case a low priority thread called a native method that required the allocation of system memory (e.g., via JNI’s GetByteArrayElements()). The result was that higher priority threads could be prevented from running until the allocation call (usually malloc()) completed.

  • A timeslice that is specified via an environment variable can now use the same units provided by the Builder’s '-timeSlice' option: 'ns', 'us', 'ms', or 's'. The environment variable is provided via the Builder’s option '-timeSliceFromEnv' or, for the jamaicavm* commands, using the variable 'JAMAICAVM_TIMESLICE'.

  • Fix JAM-3999: A race condition in the parallel GC caused the reclamation of memory that is still reachable, which may result in segfaults or arbitrary behaviour. A situation in which several threads in parallel allocate objects and immediately exchange references to these objects (e.g., via adding elements to a java.util.concurrent.ConcurrentLinkedQueue) while a new GC cycle is starting could result in the GC falsely reclaiming the memory of some of these objects.

  • Fix JAM-3452: When using dynamic heap expansion (heapSize is less than maxHeapSize) and contiguous memory to allocate a new array is not available, the heap is expanded more aggressively now to increase the chances to obtain a contiguous array. The heap is expanded if the free memory is less than 33% of the current heap size for the single core VM, and less than 25% for the multicore VM. This results in better out-of-the-box performance for accesses to arrays allocated during application startup. However, for production, it is recommended to initially set heapSize and maxHeapSize to the same value and avoid fragmentation due to incremental heap expansion.

  • Fix JAM-4451: Synchronization thread does not run at the priority specified by the priority map (on systems where SCHED_OTHER is not mapped to 0).

  • Fix JAM-4392: Provide the number of bytes that can be read from a socket on PikeOS. This is used e.g. by java.net.Socket.getInputStream().available().

  • Added support for ARMv5 systems running Linux with in-kernel Compare-And-Swap emulation.

  • VxWorks RTP port: The primap scheme is changed from POSIX mapping scheme to native primap scheme for easy integration with VxWorks native tools. The primap scheme remains the native primap scheme on the DKM port as before.

  • Fix JAM-4434: Replace VxWorks 7.0 toolchain paths in jamaica.conf with paths that use the WIND_HOME environment variable.

  • Fix JAM-4463: A thread’s priority is no longer boosted to the next higher native priority if that thread is in JNI code.

  • Fix JAM-4459: The VM verbosity when loading accelerated code has been improved. A new property has been implemented (jamaica.jaraccelerator.debug.class).

  • Fix JAM-4448: When loading at runtime accelerated code multiple versions of the same library could be extracted and remain in a running system without being reused. A new property has been provided (jamaica.jaraccelerator.extraction.dir) for configuring the how and when these libraries should be extracted and deleted.

  • Fix JAM-4409: When the -autoSeal option was true, the JAR Accelerator used to override the existing per package based sealing by true. Now a package from the JAR is considered sealed unless a package based seal says otherwise.

  • JAM-2408: The methods JNI_RegisterNatives and JNI_UnregisterNatives were implemented.

  • JAM-2717: The documentation of the Builder and Accelerator option -XobjectFormat was removed. This option is required internally and it was found confusing rather than helpful for customers.

  • Provide menu item to make JamaicaTrace text search more prominent (JAM-4406).

  • Fix JAM-4394: Builder dependencies for java.text.BreakIterator were missing.

  • JAM-2541: The PriorityCeilingEmulation monitor control policy is now supported also for the multicore VM variant.

  • JAM-3975: The aicasKeyInstaller now also detects already installed keys when using the -d option to specify a custom install location.

  • Improved readability of warnings displayed by the Accelerator. Now, when accelerating using verbose level 2, only warnings for classes from the accelerated JAR are displayed.

  • Fix JAM-4368: JAR Accelerator might throw java.util.zip.ZipException when copying entries from the source JAR to the destination JAR.

  • Add support for dynamic library loading for VxWorks 7.0 and later.

  • JAM-2815: Added new Builder options -lockMemory/-lockMemoryFromEnv that, if set, instruct the OS to attempt to lock all memory of the built application into RAM to avoid page faults (using POSIX' mlockall function). This avoids indeterministic timing due to swapping of memory to disk in virtual memory environments. For the jamaicavm* commands, this feature can be enabled through the environment variable JAMAIVCAVM_LOCK_MEMORY. This functionality is available on systems that provide the POSIX mlockall function.

  • JAM-3788: The maximum length of Java arrays was extended to 2^28-1 (instead of 2^27-1)

  • New Ant task for invoking the Jamaica JAR Accelerator.

  • JAM-4268 and JAM-4269: Added new APIs to com.aicas.jamaica.lang. AllocationHandler to determine the memory occupied by one object (method getObjectSize) and to run a partial garbage collection cycle (method partialGC).

  • The libffi bundled with Jamaica was updated to version 3.2.1. Dynamic library loading on ARM with hardfloat ABI is now supported.

  • Fix JAM-4097, JAM-4090: fix RealtimeThread.sleep(RelativeTime) to behave as specified in the RTSJ.

  • The option -Xcheck:jni (for the VM commands) and -Xcheck=jni (for the Builder) now causes the VM to report illegal JNI calls made with exceptions pending and to exit.

  • The Freetype library bundled with Jamaica was updated to version 2.6.3.

  • Support for new features of the Java 7 and 8 platforms including the invokedynamic bytecode, lambda expressions, default methods, streams APIs, the Compact 1 Profile of the standard APIs.

  • The flat directory layout of the Jamaica runtime system, where VM executable and rt.jar could reside in the same folder, is no longer supported. When deploying a VM on a target device, the structure of bin/ and lib/ folders needs to be preserved.

  • Fix JAM-3381: PeriodicTimer.createReleaseParameters() throws IllegalStateException when the timer is not active.

  • The Builder and JAR Accelerator tools use an SSA-based compiler for better performance optimizations.

  • Fix JAM-3876: PeriodicTimer.getInterval() should not return null. This was the case if the interval was set to null. A RelativeTime instance with 0 ms and 0 ns is returned instead.

  • Added basic type inference classfile verifier. This is currently limited to pre Java-6 style data flow analysis of the bytecode, no other checking (such as verification of indices and offsets for legal values) is done.

  • Support for environment variables on PikeOS. Because environment variables set from the outside cannot be read, JamaicaVM accepts PikeOS string properties as environment variables. See manual for details.