custom libgcj

David Daney ddaney@caviumnetworks.com
Mon Apr 20 15:49:00 GMT 2009


Andrew Haley wrote:
> Bryce McKinlay wrote:
>> On Mon, Apr 20, 2009 at 12:41 PM, abhishek desai <abhi00@gmail.com> wrote:
>>
>>> I want to customize libgcj compilation to include only the garbage
>>> collector part and other required files for a simple java program to
>>> compile and execute in native using gcj. Then I want to add my own
>>> java files to libgcj. Is there some way this can be done? Which files
>>> can I edit for this ?
>> This would certainly be a very useful feature. Unfortunately, there is
>> no easy way to do it. You could edit Makefile.am files by hand to
>> remove classes you don't want, but you're likely to get missing symbol
>> errors at link time due to the way libgcj is compiled.
> 
> I agree.
> 
> I think the only way to do it is iterate.
> 
> 1.  Link app statcially with libgcj and make sure it still works.
> 
> 2.  Run app with -verbose:class to see what gets used.
> 
> 3.  Remove stuff that isn't listed in -verbose:class.
> 
> 4.  Fix link errors.
> 
> 5.  If that isn't enough, start tracing through -verbose:class and edit
> the library source to prune dependencies.
> 
> 6.  Goto 4...
> 

That's right, unfortunately libgcj has many dependencies that are not 
obvious.  For example (from memory):

All programs have a ClassLoader...

ClassLoader->SecureClassLoader->URLClassLoader->(all known URL Handlers 
including https)->(Most of the crypto code)->(much of the xml 
code),(some javax.swing dialogs for certificate verification)->All of 
javax.swing

On a mips-linux system I was able to with a little work get the static 
image size of HelloWorld.java down to about 9MB (down from about 20MB). 
  To get much smaller than that would take some real work and create a 
library that is not really compatible with the reference implementation.

David Daney



More information about the Java mailing list