Release Notes — JamaicaVM 3.4

This section lists all changes from Version 3.2 in chronological order (latest change first) at the time of type setting the manual. For later changes, check the file Release_notes in the documentation directory of your Jamaica installation.

- Fixed JB01255: Warning "Unused libraries 'graphics'" if no graphics is 
  supported at all.

- New builder option -XfullStackTrace.
  Ensures that compiled code includes the full stack trace. Note that this may
  inhibit inlining and reduce the performance of the application.

- Fixed JB01246: IceBrowser does not run on Windows CE.

- java.awt.GraphicsEnvironment.getAvailableFontFamilyNames() is now implemented
  for Windows CE and WindML. 

- Fixed JB01247: Content of the table overlaps the title and the bottom

- Fixed JB01244: Layout problems in Swing application. 
  Every click on a check box increases the size of the top of the dialog.

- Performance improvements in Windows CE graphic code.

- Use device independent bitmaps on Windows CE to save native memory.

- Time spent in native methods is profiled now.

- Reduce memory fragmentation when allocating threads.

- Daylight saving time for Eastern Time has changed.

- Fix send loop for Socket.write.

- Fixed JB01207: Memory leak in graphic application.

- Improved object reachability debug methods in com.aicas.jamaica.lang.Debug.

- Added dependencies for HTML.

- Fixed JB01196: HTML Links are not displayed and followed correctly.

- Speedup initializing of compiled code.

- QNX realpath has sometimes problems if path is allocated with mmap.
  add workaround.

- Support up to 0x7fffffff utf8 strings in global constant pool.

- Support for QNX 6.4 x86

- Fixed JB00867 bug: Jamaica-Path is now written in all example Makefiles.

- Profile version only writes data used by the builder to the profile file.

  To get a more detailed profile, set the "jamaica.profile_groups" property.
  Currently the groups "speed" and "memory" are available. To get a profile
  with all available groups, "all" can be used.
  
  Example: 
  > jamaica -profile -XdefineProperty=jamaica.profile_groups="memory,speed" Main
  
- Add support for enclosing method attribute.

- Fix JB00436: Inner classes information lost when application is built.

- Fix JB00849: Class modifiers lost when building application.

- Use JViewport and JScrollpane (Swing) from openjdk.

- Use javax.naming from openjdk.

- Fixed JB01190: Buttons sometimes have a black vertical line on the right.

- Fixed JB01117 bug: WinCE-Installer now correctly detects and writes
  toolchains to jamaica.conf.

- Support for JNI 1.4 (except VM creation).

- Add support for Annotations.

- Fixed JB01188: JNI AttachCurrentThread() creates new Java thread even if 
  already attached to the VM on WindowsCE.

- Faster output of the Jamaica profile (especially on slow memory cards).

- Integrated jdwpAgent code from sun. Many fixes and features added for jvmti.

- Profiling information about the maximum number of attached JNI threads
  (entry PROFILE_THREADS_JNI in profile file).

- Faster creation of (in particular large) objects.

- Reduce data stored in binary for method table.

- A bug in the new method table initialization code caused a segfault, because
  we missed a flag that marks classes having finalizers. For WeakReferences
  this is fatal. We mark the classes correctly now.

- Optimize memory access if only one chunk (memory area) is used, e.g. if
  initial heap size equals maximum heap size.

- Cache internally used objects of java.text.SimpleDateFormat for faster 
  creation of SimpleDateFormat objects.

- Write method table into the binary so we don't have to build it at runtime.

- If javax/realtime/AsynchronouslyInterruptedException cannot be loaded we can
  save extra work needed for all methods of a class when it is loaded
  for supporting this Exception. You can force this savings w/
  -excludeClasses+="javax/realtime/AsynchronouslyInterruptedException".

- Do not handle Class.getName() called from Object.toString or other internal 
  methods in the java.lang package as using reflection. This will decrease the 
  amount of included classes and therefore the binary size of the application.

- Interpreter improvements (native stack and internal thread structure).

- Inline the array access with depth 0, but not the tree array access.

- Minor fixes and optimizations.

- Several modifications to reduce the Java heap memory demand required
  for VM internal data structures to represent classes, methods and
  fields.  

  In particular, reduced memory demand for global UTF8 string constant
  pool (about 3% of internal data saved), reduced per-class memory
  required to store constant pool tags (saves approx. 16 bytes/class),
  reduced size of method descriptor for methods with exception handler
  (about 2% of internal data), reduced size of static field
  descriptors (about 6% of internal data).

- Added new builder options -lazyConstantStrings and
  -lazyCostantStringsFromEnv to avoid early allocation of string
  constants during VM startup.  Instead, strings are allocated on
  first use, i.e., using a reference to a constant string for the
  first time may cause an OutOfMemoryError.  This significantly
  reduces the memory used by the VM for strings (typically 20% of VM
  internal data for large applications) that are never touched at
  runtime and may even reduce startup time.

- Fixed JB01172: QNX toolchain path is ignored on installation.

- Improve internal representation of the interfaces a class implements.

- Improve the code that throws an exception in compiled code so the
  instruction cache is not destroyed.

- Support for QNX 6.4.

- Add builder option -splitBuild. Creates *__extra.jar that contains all
  the classes not listed in the profiles. This has to be in the bootclasspath
  of the application, because some code might be needed (reachable via
  Exception, ...).
  
- New option '-reset' in com.aicas.jamaica.lang.Profile to clear profile.

- Show destination class of called methods in profile.

- Show called methods in profile of compiled code.

- Use better hash code for System.identityHashCode().

- Don't calculate GC and interpreter time if not profiling.

- Faster class loading

- Fix java.util.Timer by using OpenJDK implementation of java.util.Timer 
  instead of Classpath impplementation.

- Add new Option -excludeFromCompile.

- Add additional outputDebugInfoLevel.

- Update jvmti from v1.0 to v1.1.

- Pull in the jvmti/jdwp code from 6.0. under development.

- Fix Socket.connect for vxw 6.6.

- Fixed jni->GetStringUTFChars for characters > 0x7fff.

- Fixed jni->NewStringUTF so it supports UTF8 strings.

- Fixed JB01174: Object.wait(timout) that was interrupted by another
  thread just after the timeout but before the waiting thread's state
  became RUNNING could cause wait() to return without re-entering the
  monitor, causing an IllegalMonitorStateException on the
  corresponding monitorexit.

- Fixed JB01175: Thread.interrupt should release parked threads.

- Standard priority map for QNX (use native priorities 1..63).

- Fixed JB01172: QNX toolchain path is ignored on installation.

- Support for Linux Pentium 4 hosted QNX target.

- Do not treat numbers starting with 0 as octal in Formatter format string.

- Support for Runtime.exec() on QNX target.

- Fix some problem with JList and JTextField.

- Fix some problems with HttpUrlConnection 
  a) with POST commands
  b) with unknown IPs

- Enable thread monitor for systems that do not support SoLinger socket option.

- High resolution timer for QNX and POSIX on non x86 and PowerPC architectures.

- Convert all hostnames to lowercase.

- Profiling records used processor cycles from compiled methods.

- Fix native font size mapping on Windows CE to better match font sizes on Windows.

- Fixed JB01161: VM stops when writing profile via net if file can not be opened.

- Implemented JDK 1.6 functionality for java.lang.String, java.util.Arrays, 
  java.util.LinkedList, java.util.TreeMap, java.util.TreeSet.

- Fixes to make JacORB and Webspehere work.

- Escape values of userdefined properties

- Implemented file locking on Windows CE: If the under lying file system supports 
  file locking it is used, if the file system does not support file locking it 
  will calls for locking are ignored.
  
- New property 'gnu.preferences.basedir' that allows the user to define where the
  user preferences should be stored.

- Improved scrolling performance.

- Speedup startup if cpool data exceeds maximum size.

- When profile was written there were some missing characters now and then. fixed.

- Fix computing of field offsets if superclass is excluded from application.

- Fix NullPointerException in gnu CORBA.

- Fixed parsing problem when reading profile data.  This problem
  resulted in no inlining when a profile was used, causing a potential
  major performance hit for profiled applications. 

- Make jars/zips in classpath work with jamaicavm_bin.

- Fixed JB1142: ArrayIndexOutOfBoundsException or ClassCastException.
  On Windows CE, an error in the native event handling caused an Exception
  on Java side. This only happened when the detached native code was interrupted
  by an other thread while writing to an object structure. This part is now
  attached to the VM and inconsistency is not possible here anymore.
  
- Fixed JB1143: Application does not react anymore (Windows CE).
  A low priority thread that is interrupted by a higher priority thread inherits
  this priority. Sometimes (e.g. because of a page fault) this thread does not
  run anyway because it waits for the system. Using a sleep for 1 ms when
  rescheduling gives the thread a chance to run.

- Fixed JB1139: Reference value not saved in compiled code.  This one
  is related to JB1137 in a slightly different setting, the compiled
  code did not generate the required code to inform the GC about a
  local variable that is the only reference to an object while a
  method is called that may cause GC activity.

- Fixed JB1137: the Builder's compiler could create wrong code for
  nested loops: Code to save reference variables to be detected by the
  GC was missing, causing the GC to reclaim memory that is in use.

- Loading ROM resources detached.

- Protect references from gc before doing a unsync in native code.

- SmartLinker will include classes that are referenced by 'XXX.class' 
  and that have an abastract super class that will be initialized.

- VMPlainSocketImpl.connect was static synchronized, blocking all other threads
  if connect has to wait for a timeout.

- Implemented Thread.getStackTrace and Thread.getAllStackTraces()
  Note: These methods are not realtime since they block threads of 
  any priority for stack inspection.
  
- Fix bug in SecureRandom that broke SSL.
  
- Fix POSIXSignalHandler.

- Fix dependencies for Gnu security provider.

- Fix handling of symbol prefixes in ELF code.

- Fix random number generators.

- Speedup searching for classes.

- Fixed #JB01124: Deadlock when parsing jars.
 
- Increase maximum class name size to handle very long class names
  created by obfuscater.

- Support for QNX SH4 with Escher graphics

- Support for QNX 6.3.2 (using GCC 3.3)

- Implemented reintroduced method System.getenv(name).

- Implemented SwingChoicePeer to create java.awt.Choice widgets.

- On Windows CE plain Windows have no border and do not show on the 
  task bar. Frames still have borders and show on the task bar.

- Changed Builder's handling of several profile files: Several
  profiles provided to the builder's -useProfile option will now be
  weighted according to a size of the profile. I.e., each profile has
  the same weight, even if the time during with the profiles were
  recorded may differ.  This ensures that short profiles will have the
  same significance for compiler decisions as longer profiles.

- Fixed JB01122: AWT robot takes broken screen captures on Windows CE.

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