NativeJavaGcjPackages

Summary

For some packages containing java code, provide a corresponding -gcj package with java compiled to native code. It's not a win to compile everything to native code, which just costs memory for seldom used code.

Looking at the edgy time horizon, the spec is optional for edgy.

Rationale

Faster execution compared to the gij-interpreted java code. Tradeoff is higher memory consumption.

Design

Each jar file in a package installed into /usr/share/java has a corresponding file /usr/lib/gcj-4.0/ holding the corresponding so file containing the natively compiled java code. The jar file is built using the default java compiler using the arguments -O2 -fjni -findirect-dispatch.

gij is capable of working in both an interpreted mode and a compiled mode. In order to work with compiled packages, we will provide an extra package for each Java application and library that ends in -gcj which contains the compiled binaries.

To workaround limits on the number of class files and size of the byte-code, the compilation is done using the aot-compile-deb script.

The debugging symbols are provided in a corresponding -gcjdbg package.

Implementation

1. Update aot-compile-deb to compile the class/jar files in the temporary installation directories and install the results in the -gcj package(s).

2. Write a helper script for aot-compile-deb and gcj-dbtool calls. This helper script may be debhelper-based, cdbs based, or completely independant of both.

3. We will provide an example implementation for one package.

Steps to follow:

  • add the two packages to the control file.
  • call aot-compile-deb from debian/rules

  • add gcj-dbtool calls to the postinst and preinst files.
  • strip the symbols and put the symbols into the -gcjdbg package.

4. Coordinate community/developer support around updating all other Java packages (about 150 in main and universe, 40 just in main)


CategorySpec

NativeJavaGcjPackages (last edited 2008-08-06 16:38:46 by localhost)