* GCJ - reducing executable sizes
[not found] <b4c9a3e0812281005s22cb774cv9969cdea7488a33e@mail.gmail.com>
@ 2008-12-28 18:28 ` Sal
2008-12-30 3:47 ` Marco Trudel
0 siblings, 1 reply; 2+ messages in thread
From: Sal @ 2008-12-28 18:28 UTC (permalink / raw)
To: java
First off, I just wanted to say 'thanks' to any of the GCJ devs that
might be on this list, I find it the *coolest* compiler on the planet
and have been using it for years on numerous projects. Very
impressive stuff!
I've decided to do some hacking on GCJ itself - my goal: to reduce
executable sizes to be a bit closer to what might come from a
'typical' gcc c/c++ executable. Just so that we can make smaller
binary distributables. (Side note, I am not worried about the runtime
VM, just precompiling everything) I know that some things might have
to change in undesirable ways to do this, but I'm hoping command line
arguments can enable/disable the functionality transparently.
I wanted to ping the list before I started - as I'm sure many here are
much better with GCC internals than I:
1) I have seen the 'no-vm' flag (or similar), and did try this - it
reduced executable size significantly but still gives a 'Hello World'
of something in the order of 1-2MB. Have I done anything incorrectly?
What is the smallest anyone else has gotten an executable (and what
flags used?)
2) I am perusing/researching the GCJ code base, from snapshot, to try
and get an idea where some of the bulk is coming, and if it can be
refined. Can any gurus give some pointers on where some possible
optimizations can be made?
3) Any pointers on the best places to RTFM for something like this -
particularly GCJ internals/architecture, as I would love to be better
prepared for the undertaking
4) I heard a rumor that a GCJ lead developer got headhunted, is it
true? Is the project still alive and kicking!?
Thanks much in advance for any tips, and thanks again for the great
work on such a product, I hope I can help contribute back something
useful soon,
- Sal
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: GCJ - reducing executable sizes
2008-12-28 18:28 ` GCJ - reducing executable sizes Sal
@ 2008-12-30 3:47 ` Marco Trudel
0 siblings, 0 replies; 2+ messages in thread
From: Marco Trudel @ 2008-12-30 3:47 UTC (permalink / raw)
To: Sal; +Cc: java
Sal wrote:
> First off, I just wanted to say 'thanks' to any of the GCJ devs that
> might be on this list, I find it the *coolest* compiler on the planet
> and have been using it for years on numerous projects. Very
> impressive stuff!
>
> I've decided to do some hacking on GCJ itself - my goal: to reduce
> executable sizes to be a bit closer to what might come from a
> 'typical' gcc c/c++ executable. Just so that we can make smaller
> binary distributables. (Side note, I am not worried about the runtime
> VM, just precompiling everything) I know that some things might have
> to change in undesirable ways to do this, but I'm hoping command line
> arguments can enable/disable the functionality transparently.
>
> I wanted to ping the list before I started - as I'm sure many here are
> much better with GCC internals than I:
>
> 1) I have seen the 'no-vm' flag (or similar), and did try this - it
> reduced executable size significantly but still gives a 'Hello World'
> of something in the order of 1-2MB. Have I done anything incorrectly?
> What is the smallest anyone else has gotten an executable (and what
> flags used?)
Cool, never heard about this one. What is it doing?
> 2) I am perusing/researching the GCJ code base, from snapshot, to try
> and get an idea where some of the bulk is coming, and if it can be
> refined. Can any gurus give some pointers on where some possible
> optimizations can be made?
The following is all about static compilation:
From http://jnc.mtsystems.ch/more_info.html -> FAQ:
Q: Why are the binaries so big?
A: The problem now is, that the Java API classes are heavily
interconnected; a simple "Hello World" application uses the security
manager which uses AWT which uses... Because of this, you will always
have a big part of the classlibrary in your binaries.
Since JNC 0.9, you can exclude parts of the class library if you don't
need them and thus drastically reduce the size of your binaries.
So, JNC (GCJ with some enhancements) allows you to exclude the GUI or
the JCE parts of the class library. I once made an experimental
implementation that creates stubs for all objects in libgcj.a and
therefore allows to exclude all objects. The results were quite
promising. You can find the code in the package ch.mtSystems.gcjStubber
in the Subversion repository of JNC (on sourceforge) if you want to take
a look at it.
Another project that might be interesting for you is on the "done with
GCJ" page. Unfortunately not on the publicly linked one, but in the
Wiki(?) (the public one should have been replaced with it for years
now). Unfortunately I forgot the name of the project, but I think it
essentially removes parts of GCJ in the source code and therefore you
will get a very minimalistic compiler that produces small binaries
(sorry to be not of more help here, but I was never able to find that
wiki page and also lost interest in it since it seems to stay "hidden").
> 3) Any pointers on the best places to RTFM for something like this -
> particularly GCJ internals/architecture, as I would love to be better
> prepared for the undertaking
> 4) I heard a rumor that a GCJ lead developer got headhunted, is it
> true? Is the project still alive and kicking!?
From following the list, my impression is that GCJ kind of died when
OpenJDK was released. IcedTea has then been done to create a completely
free Java implementation, but otherwise, I think work has more or less
been stalled. Please note, this is my subjective impression, I think the
main developers see this differently.
So, with OpenJDK being around now, the only advantage of GCJ is the
native compilation. Considering that GNU Classpath is used as class
library provider (mixed with GCJ proprietary code) and that GNU
Classpath is still kinda buggy or has slow implementations in some
important key libraries, I think interest for the native compilation
part has never gained wide spread. Of course this might also have to do
with the bad support for Windows, making it somehow a Linux only project
what is quite sad.
So to conclude my personal summary of the current GCJ situation, I would
say GCJ is interesting for people wanting to compile something on Linux
and not minding fixing some stuff in GCJ/GNU Classpath themselves...
Because I'm very interested in Java to native compilation but want the
same quality of all libraries as provided in OpenJDK, I worked on a Java
to Eiffel compiler the last 6 months. I now have an experimental
implementation (http://jaftec.origo.ethz.ch/download -> JENC) for
Windows. See the manual for an example usage. It compiles all proivded
Java and required OpenJDK classes without modification to Eiffel and
therefore keeps the quality of the Java code. Even the OpenJDK native
libraries (e.g. java.dll) will be used (except jvm.dll which has been
reimplemented).
Since Eiffel will compile to native by default and has support for at
least Windows, Linux and Mac, you have a native compiler with the
quality of OpenJDK.
Hope that helps
Marco
> Thanks much in advance for any tips, and thanks again for the great
> work on such a product, I hope I can help contribute back something
> useful soon,
>
> - Sal
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-12-30 3:47 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <b4c9a3e0812281005s22cb774cv9969cdea7488a33e@mail.gmail.com>
2008-12-28 18:28 ` GCJ - reducing executable sizes Sal
2008-12-30 3:47 ` Marco Trudel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).