8.2 (Release 2)

  • Fix JAM-6290: The Builder and JAR Accelerator generate incorrect code for catching a CeilingViolationException.

  • Opening a DatagramChannel with IPv6 is now supported under Windows CE (JAM-6214).

  • Fix JAM-6172: If there is an incorrect argument (for example an incorrect path to the executable file) in the parameters of a java.lang.ProcessBuilder constructor, the VM may crash under Windows CE during error handling.

  • Fix JAM-6253: Getting hostname of the network device was not thread-safe while using IPv4 on QNX. Affected functions could not run concurrently (InetAddress.getHostName, InetAddress.getCanonicalHostName and gethostbyaddr).

  • Fix JAM-6148, JAM-6031: Append functionality implemented for Windows CE. The append option is now supported for FileChannel.open() and Files.write().

  • Fix JAM-6275: PriorityCeilingEmulation incorrectly throws an IllegalMonitorStateException instead of a CeilingViolationException.

  • Fix JAM-6312: Missing implementation of the method getSingleton() in CeilingViolationException.

  • Fix JAM-6183: Incorrect method called by compiled code when using -ssa=false.

  • Fix JAM-6137: The time benefit brought by the incremental compilation became smaller than in previous versions. In some platforms building an application for the second time might take as long as the first.

  • Fix JAM-6124: Segmentation fault triggered by JNI AttachCurrentThread as well as by AttachCurrentThreadAsDaemon functions when JAMAICAVM_NUMTHREADS=JAMAICAVM_MAXNUMTHREADS.

8.2 (Release 1)

  • Fix JAM-6079: The Builder does not automatically add the resource "lib/ hijrah-config-umalqura.properties" when needed. Therefore a built application might fail with a FileNotFoundException when trying to access this resource.

  • Fix JAM-6081: A built application might not recognize that a certificate is blacklisted.

  • Prevented possible segmentation fault during start-up phase by disabling the compilation of default methods of java/lang/CharSequence (JAM-6029).

  • Fix JAM-6026: Querying the CPU time used by the process on which JamaicaVM is running might yield a negative value due to an overflow on 32-bit Linux platforms.

  • Fix JAM-2000: java.io.File on Windows now supports extended-length paths.

8.2 (beta)

  • Fix JAM-5461: ThreadGroupController.interruptBlockingIO may not be able to interrupt threads in certain IO operations on Windows.

  • Fix JAM-5791: Fixed subtle problem in class loader delegation for accesses to methods or constructors via reflection. Before this fix, reflective calls could cause redundant calls to the class loader for classes that have been loaded already, which could, e.g., result in failing access control / security manager checks.

  • Java serialization now recognizes the methods Object readResolve() and Object writeReplace(), even if they are inherited as default methods from interfaces, or return type-overloaded (JAM-5588).

  • The Builder option -setTimeZone is deprecated and has no effect. The time zone information of OpenJDK is stored in a database file that will be included completely if required by the application (JAM-5809).

  • javax.realtime.AbsoluteTime.toString() was changed to reflect the behavior specified in the RTSJ (JAM-5585).

  • RealtimeThread.start(PhasingPolicy) in accordance with the RTSJ version 2 was renamed to RealtimeThread.startPeriodic(PhasingPolicy) (JAM-5775).

  • The usage counter for loaded shared libraries from accelerated jar files is now accurate, and their unloading prompt (JAM-5797).

  • The detection of synchronous changes to jar files in the file system environment of a running application for triggering updates of loaded accelerated code is improved from second to millisecond precision (JAM-5576).

  • Fix JAM-5565: The JAR Accelerator may generate erroneous code for invocations of static and private interface methods that throws IncompatibleClassChangeError.

  • Fix JAM-5476: The Builder and JAR Accelerator may resolve multiple inheritance of methods with incorrect precedence.

  • Fix JAM-5475: The Builder may resolve multiple inheritance of fields with incorrect precedence.

  • The command line option -enableassertions (-ea) has been removed from the JAR Accelerator, where it has no effect (JAM-5254).

  • Fix JAM-5253: JarAccelerator fails to create jar file if current working directory is called tmp.

  • Fix JAM-5139: Jamaicah throws a NullPointerException if a class cannot be found.

  • The Builder and JAR Accelerator now create the destination directory, if it does not exist, on all platforms (JAM-3171).

  • The Builder now implicitly includes annotation classes in a built application if they are used as annotations (JAM-2713).

  • The Builder and JAR Accelerator command line option -XshowCompiledMethods now also shows compiled methods in object files being reused from the temporary directory (JAM-2393).

  • Fix JAM-5913: Built applications and accelerated jar files may contain compiled machine code that behaves incorrectly when accessing classes that are redefined incompatibly at load time.

  • Fix JAM-5946: The JAR Accelerator command line option -autoSeal may fail to seal the accelerated jar file if the manifest contains any named entries.

  • Fix JAM-5870: The Accelerator may produce erroneous code for field accesses that refer to an instance field at compile time, but to a static field at load time, or vice versa.

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

  • Fix JAM-5884: Line numbers in compiled code computed from unsorted line number tables are nondeterministic.

  • JAM-5883: The JAR Accelerator does no longer require the -classpath command line option. It is retained for compatibility, but removed from documentation and should no longer be used.

  • JAM-5801: The JAR Accelerator now produces a warning instead of an error when the option -autoSeal=true (default) is given and a class belonging to a sealed package is referenced but not found.

  • Fix JAM-5854: Static call analysis may fail to detect caller-sensitive targets for virtual calls. Compiled code that invokes caller-sensitive methods may obscure the owner class of the immediate caller.

  • JAM-5710: JamaicaVM now accepts a property jamaica.jaraccelerator.check.class. If set to true, any attempt to modify the bytecode definition of a class for which compiled machine code is loaded from an accelerated jar file results in an IncompatibleClassChangeError.

  • JAM-4354: Elliptic curve cryptography is supported on Linux, QNX and Windows.

  • Fix JAM-5764: The JAR Accelerator example now demonstrates correctly how to choose between interpreted and compiled versions of the same class.

  • Caffeine benchmark example no longer requires the host system C compiler to build for the target. The C compiler for the target alone is sufficient.

  • The Jamaica distribution now contains jamaicavmp_bin. This is the profiling VM with precompiled Java system classes built-in. The commands "jamaicavmp" and "jamiacavmpm" both launch jamaicavmp_bin on the host system (JAM-4911).

  • Fix JAM-5290: Setting the remote port to 0 when sending datagram packets is now allowed for all platforms. How this might be handled is OS-dependent.

  • Unsorted line number tables in bytecode are now handled more robustly by the Builder and JAR Accelerator. The warning remains in place (JAM-2338).

  • Fix JAM-5713: Validation of Builder option value fails for many *FromEnv options with a StringIndexOutOfBoundsException when empty string is used as option value, which happens when using the JamaicaVM Eclipse Plug-in.

  • 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-5703: MappedByteBuffer.force() does not throw IOException as specified by the API. Instead, a runtime exception, viz. UncheckedIOException is now thrown, if the entire buffer’s content cannot be written to the file.

  • The system property javax.realtime.disable_new_rtsj_apis was removed.

  • JamaicaVM now prints the stack of the corresponding native thread and all Java threads when catching SIGSEGV or SIGABRT if stacktraces are supported by the target platform, even when not running in debug mode (JAM-5644).

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

  • Fix JAM-4399: Java objects that define a finalize() method no longer become finalizable before the constructor of class Object was called successfully. This fixes potential bugs or security holes that can be provoked by user code that throws an exception in a constructor before calling super(). Before this fix, the finalize() method could be used to get hold of the uninitialized instance to potentially perform operations that are not permitted, while with this fix, such an object will never become eligible for finalization.

  • 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.

  • When JamaicaVM or a built application receives a SIGSEGV or SIGABRT, the VM as part of the shutdown sequence prints whether it arrived on a JNI native thread or on one of the jamaica native threads. Additionally, when run with debug VM, it prints the Java Stack of all the Java threads at that instance along with C-stack of the thread on which the signal arrived.

  • Threads that are blocked in a network I/O operation are now interruptible on Windows (JAM-5657).

  • The method sun.misc.Signal.handle does not support SIGBUS because it is internally handled by the VM.

  • 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-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-5566: Dynamic thread creation leads to SIGSEGV in low memory conditions.

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

  • 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.

  • The threads of JamaicaVM now install a default SIGSEGV handler. If a SIGSEGV happens a thread-info message is printed out to the standard error stream and the VM is aborted. As a consequence, the VM terminates with SIGABRT exitcode. For more information on the exit codes, refer to the Exitcodes section of the JamaicaVM user manual.

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

  • The Builder option -setLocalCryptoPolicy is deprecated and has no effect. Since OpenJDK 8u152, the unlimited policy files are shipped and the files are automatically included if required (JAM-5564).

  • Fix JAM-5203: The JAR Accelerator does no longer attempt to load classes that are referenced from the JAR file to be accelerated but not found on the classpath, nor exclude entities containing such references from compilation.

  • 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.

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

  • Fix JAM-5036: The initial heap-size of Jamaica and the builder are different. Now both heap-sizes are set to 768MB.

  • 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-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-5496: On targets that do not have Large File support, FileChannel operations using an offset larger than (2^31) - 1 will throw an IOException with the error message: integer overflow. Affected methods:

    • FileChannel.write(ByteBuffer src, long position)

    • FileChannel.position(long newPosition)

    • FileChannel.truncate(long size)

  • Fix JAM-3267: On QNX, the local address of a DatagramSocket was reset after it had been disconnected. Affected methods:

    • DatagramSocket.disconnect()

    • DatagramSocket.bind(SocketAddress addr)

    • DatagramSocket.getLocalSocketAddress()

  • Fix JAM-4430: Heap expansion in low memory situation did not work reliably for the parallel VM with constant GC work enabled.

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

  • Fix JAM-5306: Dynamic libraries loaded by JamaicaVM are now all unloaded on VM shutdown, fixing potential memory leaks.

  • JAM-5400 Builder and JAR Accelerator option -XnoStrip has become external (extended), therefore visible to the end user.

  • Fix JAM-4955: Jamaica’s synchronization thread (Jam_Sync) now stops running whenever there are no ready threads left and hence no time slicing is needed. This enables Jamaica’s CPU usage to drop to 0% if there is no activity in Java threads.

  • JAM-5539: Add new option for setting the raw memory range separately from the physical memory range.

  • Fix JAM-5445: Avoid read of uninitialized memory on calls to ZipEntry.getEntry("").

  • 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-5477: Starting the VM with a very small heap size (e.g., -Xms64k -Xmx64k) could result in a segmentation fault.

  • Fix JAM-5478: Abstract methods did not properly mask out inherited default methods, resulting in calls to default methods when AbstractMethodError should have been thrown or in IncompatibleClassChangeError in case of a conflict between several default methods that are erased by the abstract method.

  • Fix JAM-5248: Improved OutOfMemoryError: In case an array is allocated that exceeds the maximum supported array length, the detail message now explains this.

  • Fix JAM-5426: Removed race condition in VM option -XX:OnOutOfMemoryError that could cause repeated execution of the shell command provided via this option or (in rare cases) segmentation faults.

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

  • 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.

  • The Jamaica C Compiler Ant task now supports providing definitions of macros through the nested elements 'define' and 'defines' (JAM-5506).

  • The VM now supports the -verbose:memory option to show native memory allocations. Output is cumulative at VM termination.

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

  • The jamaicavm commands and any application built with -XnoMain no longer attempt to load boot classes from <javaHome>/rt.jar, but only from <javaHome>/lib/rt.jar and, alternatively, <javaHome>/classes.

  • Fix JAM-3667: Builder now detects and includes extension classes: The Jamaica Builder now supports the <target>/lib/ext directory, it loads classes from there and builds them into the application. At runtime, these classes will be loaded by the extension class loader just as they are when using, e.g., jamaicavm_slim.

    This makes it easier to build applications that require jar files in the extension folder, e.g., JavaFX that requires jfxrt.jar.

  • Fix JAM-5384: Denormalized values are flushed to zero on Windows CE ARM.

  • For security reasons the Jamaica Builder now creates position independent executables by default on Linux.

  • Fix JAM-5370: URLs of built-in class file are now accessible at runtime. Details are explained in the documentation of the Builder option -resource in the manual.

    This fixes NullPointerException that occurred in the Jetty framework for built applications (in class org.eclipse.jetty.annotations.AnnotationConfiguration while executing method getJarFor(ServletContainerInitializer)).

  • 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.

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

  • 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.

  • File paths of included resources are shown instead of the file names when the Builder option -showIncludedFeatures is set. This makes it easier to detect what resources are actually built in (JAM-5352).

  • 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-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.

  • 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.

  • 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.

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

  • 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).

  • 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-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.

  • 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-5169: Fixed potential native output buffer overflow in the internal com.aicas.jamaica.lang.Debug.print functions.

  • JAM-5158: Allocation budgets set via javax.realtime.MemoryParameters did not work reliably for new allocated instances of java.lang.String.

  • 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.

  • Fix JAM-5137: In the single core VM, allocation of large arrays that require heap expansion is now more efficient, resulting in faster VM startup time.

  • 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.

  • The CA certificates have been updated.

  • 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.

  • Unify example ant targets across platforms. The executable extension is now omitted (JAM-4857).

  • Improve thread yields on Windows CE.

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

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

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

  • Fix JAM-3847: Builder support for -XX:MaxDirectMemorySize option