New in libgcj X.XX:

* 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
