8.5 (beta)

NEW FEATURES

  • Almost all RTSJ2 methods in ScopedMemory have been implemented, including methods to monitor backing store availibility and use, as well as the new enter and joinAndEnter methods, but excluding the scope visitor methods.

  • RTSJ2 StackedMemory is fully functional.

  • RTSJ minimum interarrival time handling for SporadicParameters has been implemented.

  • For RTSJ2, basic Asynchronous Task Termination (ATT) is now implemented. Application code can initiate ATT by the use and means of javax.realtime.control.AsynchronousControlGroup.

  • For RTSJ2, the initial memory area for javax.realtime.ScopedMemory and javax.realtime.memory.ScopedMemory are handled different as per the specification: the old, deprecated class holds the scope open between releases and the new one enters for each release.

  • The Builder is now able to generate stubs for all built-in native methods, regardless of whether the library containing the implementation is reachable at build time or not. Therefore, libffi is only required for calling dynamically loaded native methods. The documentation of the option -XloadJNIDynamic has been updated accordingly.

  • Jamaica Profile Analyzer is introduced as new tool. It receives profiles as input, parses and analyzes them, and produces the analysis' results as plain text files.

  • The Profiling VM now supports tracking resources referenced in the application.

  • The Builder and JAR Accelerator have a new extended option -XshowCompiledMethods for displaying all methods selected for compilation.

  • The Builder now supports an extended command line option -XjavaHomeFiles that enables including listed files from the Java home directory into the built application.

  • The Builder now supports including resources with arbitrary entry names from archives.

  • JamaicaTrace now uses a timeout. If the connection is lost, the application crashes, or hangs, data is no longer discarded and will be displayed. No timeout was used before and JamaicaTrace would wait for a response indefinitely. The timeout can also be set to a user-defined value.

  • In addition to invoking the Builder and other Jamaica tools from an Apache Ant build file, this is now also possible from an Apache Maven build file. For this, a JamaicaVM Maven Plug-in is provided.

NOW SUPPORTED (OR CHANGED)

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

  • The default value of the Builder option -percentageCompiled has been increased from 10 to 30.

  • The JNI methods RegisterNatives and UnregisterNatives are now also supported for built-in classes.

  • Jamaica now requires CentOS/RHEL version 8 for distributions that required CentOS/RHEL version 7 before.

  • Jamaica is now shipped with OpenJDK’s root CA certificates based on jdk8u252.

  • Jamaica is now based on standard classes of OpenJDK version jdk8u252.

  • Jamaica now supports local or remote connections to JMX-based tools jconsole, Java Mission Control, and VisualVM.

  • Jamaica can now be integrated, in addition to Eclipse, with the IDEs IntelliJ IDEA and Visual Studio Code.

  • The version format of distribution packages was updated: JamaicaVM-<major>.<minor>.<release>-<maturity>-<build>-<configuration>

  • The JamaicaVM distribution directory structure has changed. Static development libraries now reside under "slib" rather than "lib" in the target directory.

  • The RTSJ2 ReleaseRunner for managing how event handlers are executed has been implemented.

  • An RTSJ asynchronous event handler now checks the validity of its affinity when the handler becomes active, e.g., is added to an event.

  • All network write (socket send) operations on POSIX-based platforms are now interruptible by signals.

  • The default value for the Builder command line option -smart has been changed to false, except when -closed is also set to true, in order to improve error detection and recovery of built applications when dynamic access to classes, fields and methods via reflection, (de)serialization or method handles are used.

  • The JAR Accelerator now warns about or rejects old profiles like the Builder does.

  • Using package wildcards "*" or "…​" in command line options to the Builder/Accelerator no longer causes redundant traversal of directories.

NO LONGER SUPPORTED (OR DEPRECATED)

  • Removed jamaicaappletviewer from headless configurations.

  • JamaicaVM is no longer shipped as RPM package.

  • Removed support for Windows CE.

  • Removed support for QNX versions older than 7.0.

  • Removed support for VxWorks versions older than 7.0.

  • The deprecated Builder command line options -deprecatedSSA, -finalizerPri, -finalizerPriFromEnv, and -incrementalCompilation have been removed.

  • The Builder option -setGraphics is now deprecated and has no effect. The configured graphics system is always used and multiple graphics systems in the same distribution are no longer supported.

  • The options -useProfile and -percentageCompiled are now deprecated in the Builder and JAR Accelerator. They have been moved to the new Profile Analyzer tool.

  • All -…​fromEnv options are now deprecated in the Builder. The same effect can now be achieved with the corresponding base option.

  • The worst case execution time window and option in the menu were removed from JamaicaTrace.

BUG FIXES

  • Fix JAM-7947: The Ant-task "JamaicaLinkTask" is now using the default value of the Builder option -XlinkStaticFlags when -XlinkStatic contains "system". And it is now also using the default value of the Builder option -XlinkDynamicFlags when -XlinkStatic does neither contain "system" nor "jamaica".

  • Fix JAM-8327: Allocation in RTSJ2 StackedMemory now works in all cases. The implementation is now completely specification conform.

  • Fix JAM-8024: When join() is called on a given thread, the state of that thread is now reliably reported as TERMINATED by Thread.getState() once the join completes.

  • Fix JAM-7858: Methods retrieving SwapSpace or PhysicalMemory sizes in the sun.management.OperatingSystemMXBean class are no longer prone to returning a bogus value on Linux 32-bit platforms.

  • Fix JAM-4106: Resolve a race condition in the methods java.net.SocketInputStream.socketRead0(), sun.nio.ch.SocketChannelImpl.checkConnect(), sun.nio.ch.SelectSelectorImpl.select0(), and in the JVMTI networking.

  • Fix JAM-7843: Setting a thread priority higher than the maximum does not trigger a segmentation fault anymore.

  • Fix JAM-3568: JamaicaVM now correctly rejects invalid class names.

  • Fix JAM-7004: Eliminate C99 undefined behavior in the Builder-generated code that was detected by the clang undefined behavior sanitizer.

  • Fix JAM-7003: Eliminate C99 undefined behavior in the VM code that was detected by the clang undefined behavior sanitizer.

  • Fix JAM-7852: Remove a C compiler warning for generated code that may happen if a value greater than 32767 is written to char array elements.

  • Fix JAM-8035: RTSJ realtime priority handling now prevents the use of invalid values.

  • Fix JAM-6406: Instances of RTSJ ScopedMemory are now cleared properly on exit when the last thread within leaves the scope or terminates.

  • Fix JAM-8263: Improve performance of bytecode verification for very large methods and avoid potential blocking and an eventual heap overflow.

  • Fix JAM-7191: Cycles and hang-ups caused by a pending RTSJ AsynchronouslyInterruptedException during Object.wait() within a synchronized section no longer occur.

  • Fix JAM-8154: The logic for Thread.interrupted() has been modified to return false when an RTSJ AsynchronouslyInterruptedException is pending.

  • Fix JAM-8101: Finalization for RTSJ ScopedMemory now runs in that memory area.

  • Fix JAM-8081: Converting a float to a String now works reliably in an RTSJ scoped memory.

  • Fix JAM-7221: RTSJ Deadlines may no longer exceed periods.

  • Fix JAM-6570: The RTSJ method RawMemoryRegion.get() is now named correctly.

  • Fix JAM-5963: A RealtimeThread can now be created in scoped memory.

  • Fix JAM-4691: RTSJ ScopedMemory now properly tracks usage counts.

  • Fix JAM-1297: When the initial memory area of an RTSJ handler is javax.realtime.ScopedMemory, that area is now held open between releases.

  • Fix JAM-7438: CPool global index calculated for an UTF8 entry is now always correct.

  • Fix JAM-7882: Built applications no longer throw incorrect ArrayStoreExceptions.

  • Fix JAM-1392: Memory inside of a scoped memory instance is now cleared when the last thread allocated in scope terminates.

  • Fix JAM-6964: Timers now release their handlers when deactivated (stopped).

  • Fix JAM-7865: The object used for join notification is no longer cleared before the join can happen for threads allocated in a scope.

  • Fix JAM-3387: RelativeTime.addInterarrivalTo(AbsoluteTime dest) now works correctly.

  • Fix JAM-7426: Smart linking no longer excludes methods and fields of bootclasspath classes that are accessed only via reflection on class literals from built applications. This caused subtypes of IncompatibleClassChangeError to be thrown at runtime.

  • Fix JAM-7293: Fixed a potential deadlock in the multicore VM when assigning Affinity to a realtime thread from a different thread.

  • Fix JAM-7148: The mapping between the system CPUs given with the -Xcpus option and their VM-internal representation, especially as required for RTSJ Affinities, is now correct.

  • Fix JAM-7094: Applications that use generated RMI stubs no longer raise NoClassDefFoundError at runtime if built with the Builder command line option -smart=false (default).

  • Fix JAM-5579: An RTSJ AsyncEventHandler can now uniquely block handlers, without blocking all other handlers with the same priority.

  • Fix JAM-7428: RTSJ2 Affinity identifiers are now unique.

  • Fix JAM-7222: RTSJ ScopedMemory joinAndEnter will now immediately throw an exception when logic is null.

  • Fix JAM-7219: Synchronization for starting deadline checking for RTSJ ProcessingGroupParameters has been narrowed to avoid deadlocking.

  • Fix JAM-7179: Implemented RTSJ AsynchronouslyInterruptedException.propagate so the AsynchronouslyInterrupted.happened method now works.

  • Fix JAM-7141: RTSJ Timed join functions in ScopedMemory now terminate when the timeout is exceeded.

  • Fix JAM-6640: StaticThrowable now provides stack traces as specified in RTSJ2.

  • Fix JAM-6564: RTSJ Minimal interarrival times are now handled as specified.

  • Fix JAM-6549: AsyncLongEventHandler and AsyncObjectEventHandler now behave as specificed in RTSJ2.

  • Fix JAM-7125: In configurations with com.aicas.jamaica.awt.AicasFontManager the Font.createFont from File or InputStream no longer always create a default font (Bitstream Vera Sans).

  • Fix JAM-7373: Groovy 3.0 now runs on JamaicaVM.

  • Fix JAM-6963: New files on VxWorks dosFs file systems are now always created with zero length.

  • Fix JAM-7226: Methods java.lang.Thread.getStackTrace(), java.lang.Thread.getAllStackTraces() and java.lang.Thread.countStackFrames() no longer crash the VM with segmentation fault.

  • Fix JAM-7323: The names generated by the Builder for two of its internal global constant types (strings and constant pool indices) are now unique.

  • Fix JAM-7072: On the multicore VM, creating and running a thread inside a nested ScopedMemory region no longer results in a segmentation fault if the thread lives longer than the scope in which it was created.

  • Fix JAM-6769: Ensure changes to ReleaseParameters take effect at the correct time.

  • Fix JAM-7123: Modify java.util.concurrent.locks.AbstractQueueSynchronizer for use in ScopedMemory.

  • Fix JAM-6628: Ensure waitForNextRelease and waitForNextPeriod behave properly when no deadline miss handler is provided.

  • Fix JAM-7289, JAM-7297: rmid and rmiregistry no longer fail to start due to permission violations.

  • Fix JAM-5327: AsynchronousSocketChannel.read() no longer occasionally completes with SocketException (socket closed) instead of InterruptedByTimeoutException when the timeout value is specified and exhausted.

  • Fix JAM-5683: Threads performing sun.nio.ch.SocketDispatcher.read() method can now be interrupted.

  • Fix JAM-7230: Asynchronously closing a blocking socket descriptor that is in use no longer results in a segmentation fault if the blocking operation finishes just before the socket is actually closed.

  • Fix JAM-7234: The native method sun.nio.ch.IOUtil.configureBlocking() no longer fails with java.io.IOException in a scenario where asynchronous close and interrupt of timed socket adapter methods takes place.

  • Fix JAM-6918: String.hashCode() now produces correct results for strings that contain any Unicode character of value above '\u8000'.

  • Fix JAM-7021: The return value of the 64-bit compare-and-swap implementation using the gcc builtin on Linux for PPC7450 and PPCE300 is now correct.

  • Fix JAM-7202: The VM no longer locates resources in the current working directory in preference to built-in ones.

  • Fix JAM-6939: Accelerating a jar file on a 32bit multicore configuration with -parallel=true (the default) no longer fails due to ill-formed intermediate C code.

  • Fix JAM-7010: JamaicaVM and built applications now properly resolve method handle constants embedded in class files if the method handle kind denotes a field access, no longer throwing a NullPointerException.

  • Fix JAM-6991: Undefined behavior when computing the hash code of a string is avoided.

  • Fix JAM-7085: Building an application with the Builder command line option -smart=false (default) no longer causes all system dependencies, as well as classes referenced only from unreachable code, to be included.

  • Fix JAM-6436: Class loaders following the delegation model now can access built-in resources ending in .class.

  • Fix JAM-6327: Building or accelerating an application where a class name contains characters outside the alphanumeric range no longer fails due to ill-formed intermediate C code.

  • Fix JAM-6981: The values of monitor ceiling and thread priority displayed in the message of javax.realtime.CeilingViolationException are no longer swapped.

  • Fix JAM-6567: The multicore VM no longer ignores ceiling policy violations and now throws javax.realtime.CeilingViolationException as defined in RTSJ2.

  • Fix JAM-6744: JamaicaVM no longer raises a DeadlockError if the system class loader and a user-defined class loaders are loading classes concurrently and support for accelerated JAR files is activated.

  • Fix JAM-6581, JAM-6582: Returned hostname of the network device (via InetAddress.getHostName()) on QNX no longer return corrupted strings, which caused InetAddress.getCanonicalHostName() to occasionally return the textual representation of the IP address instead of providing the FQDN.

  • Fix JAM-6895: Built applications now also start without the <javaHome>/lib directory being installed on the target.

  • Fix JAM-6900: The Builder and the JAR Accelerator now generate correct code when a synchronized block is surrounded by a try-catch block.

  • Fix JAM-6840: Fonts that are created with a font face or family name with a style that is not plain are now found.

  • Fix JAM-1203: The Builder option -includeJAR now correctly handles .class JAR file entries that do not represent loadable classes due to being ill-formed, misnamed or placed outside the main class tree.

  • Fix JAM-6734: Core dumps are again available on VxWorks platforms.

  • Fix JAM-6735: java.util.logging.FileHandler.isSetUID() is now implemented.

  • Fix JAM-6690: The resource lib/security/cacerts is now automatically included in built applications if required.