This is the mail archive of the java-discuss@sourceware.cygnus.com mailing list for the GCJ project. See the GCJ home page for more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: class gc


On Mon, 01 Mar 1999, Per Bothner wrote:
>> hmm... what objects besides classes can gcj allocate statically?  String
>> literals?
>
>String literals can only be allocated statically if you do link-time
>merging (since Strings have to be interned).  This is difficult
>when doing dynamic linking, but should be straight-forward when
>satic linking.
>
>> Static/final members maybe?
>
>Yes, those can be statically allocated.  The advantage is biggest for
>arrays, but even non-arrays can win if you can "inline" some of the
>initialization as initialized static data.
>
>Currently gcj does not do this, but it is planned.
>
>	--Per Bothner
>Cygnus Solutions     bothner@cygnus.com     http://www.cygnus.com/~bothner

Hmmm... Looks to me that `gcj' statically allocates static members.  For
example `java.lang.System.out' corresponds to the statically allocated
data field:

	_Q34java4lang6System$out

It does not, however, statically allocate the object which java.lang.System.out
references.  It would be a big win to be able to allocate static/final tables in
classes such as `java/lang/Character.class'.  This monster merely contains
initializations of a few static arrays, and in C or C++ would be tiny.  Yet, in
Java, this compiles into mammoth run-time initialization of the arrays,
individually checking the subscripts of each element.  Unfortunately, JVMs
have no way of initializing static tables ;-(  It may be necessary for `gcj'
to compile java source instead of class files to properly initialize
static/final tables in an efficient way.

 --
Jon Olson, Modular Mining Systems
	   3289 E. Hemisphere Loop
	   Tucson, AZ 85706
INTERNET:  olson@mmsi.com
PHONE:     (520)746-9127
FAX:       (520)889-5790