*** Changes in GCC 3.4:

* Compiling a .jar file will now cause non-.class entries to be automatically 
  compiled as resources.

* libgcj has been ported to Darwin.

* Jeff Sturm has adapted Jan Hubicka's call graph optimization code to gcj.

* libgcj has a new gcjlib URL type; this lets URLClassLoader load code from 
  shared libraries.

* libgcj has been much more completely merged with GNU Classpath.

* Class loading is now much more correct; in particular the caller's class 
  loader is now used when that is required.

* Eclipse 2.x will run out of the box using gij.

* Parts of java.nio have been implemented. Direct and indirect buffers work, 
  as do fundamental file and socket operations.

* java.awt has been improved, though it is still not ready for general use.

* The HTTP protocol handler now uses HTTP/1.1 and can handle the POST method.

* The MinGW port has matured. Enhancements include socket timeout support, 
  thread interruption, improved Runtime.exec() handling and support for 
  accented characters in filenames.

*** Changes in GCC 3.3:

* The java.sql and javax.sql packages now implement the JDBC 3.0 (JDK 1.4) 
  API.

* The JDK 1.4 assert facility has been implemented.

* The bytecode interpreter is now direct threaded and thus faster.


*** Changes in GCC 3.1:

* libgcj now includes RMI, java.lang.ref.*, javax.naming, and 
  javax.transaction.

* Property files and other system resources can be compiled into executables 
  which use libgcj using the new gcj --resource feature.

* libgcj has been ported to more platforms. In particular there is now a 
  mostly-functional mingw32 (Windows) target port.

* JNI and CNI invocation interfaces were implemented, so gcj-compiled Java 
  code can now be called from a C/C++ application.

* gcj can now use builtin functions for certain known methods, for instance 
  Math.cos.

* gcj can now automatically remove redundant array-store checks in some common 
  cases.

* The --no-store-checks optimization option was added. This can be used to 
  omit runtime store checks for code which is known not to throw 
  ArrayStoreException

* The following third party interface standards were added to libgcj: 
  org.w3c.dom and org.xml.sax.

* java.security has been merged with GNU Classpath. The new package is now 
  JDK 1.2 compliant, and much more complete.

* A bytecode verifier was added to the libgcj interpreter.

* java.lang.Character was rewritten to comply with the Unicode 3.0 standard, 
  and improve performance.

* Partial support for many more locales was added to libgcj.

* Socket timeouts have been implemented.

* libgcj has been merged into a single shared library. There are no longer 
  separate shared libraries for the garbage collector and zlib.

* Several performance improvements were made to gcj and libgcj:
      o Hash synchronization (thin locks)
      o A special allocation path for finalizer-free objects
      o Thread-local allocation
      o Parallel GC, and other GC tweaks

*** Changes in GCC 3.0:

* libgcj now includes a bytecode interpreter. If a compiled version of a class 
is not found in the application binary or linked shared libraries, the
class loader will search for a bytecode version in the CLASSPATH and execute
it using the interpreter. A new front end that behaves like the traditional
`java' command is also provided: `gij'.

* Support for specifying java system properties. Properties can either be set 
at runtime via the GCJ_PROPERTIES environment variable in the format 
"<name>=<value> ..."'; or can be compiled into an application binary using 
-D<name>=<value>.

* Support for setjmp/longjmp (sjlj) exception handling has been added, as an
alternative to the existing range-table based mechanism. sjlj is the default
on non-sparc, non-x86 targets, or can be specified with the 
`--enable-sjlj-exceptions' configure parameter.

* Complete JDK 1.1 reflection support, including invocation.

* Throwable.printStackTrace() has been implemented.

* Runtime.loadLibrary() has been implemented.

* Class.forName() will now try to load a series of shared objects in order 
to find the requested class.  If a class `gnu.quux.whatever' is requested, 
libgcj will search the system shared library path (eg LD_LIBRARY_PATH) for 
`gnu-quux-whatever.so', then `gnu-quux.so', and finally `gnu.so'.

* A pure-java implementation of java.math.BigInteger.

New in libgcj 2.95:

* First public release
