heap allocation and gc with gcj
Bryce McKinlay
mckinlay@redhat.com
Tue May 4 22:57:00 GMT 2004
Vladimir Leven wrote:
> Using GCJ (3.2.2) If I do the following in a loop:
>> while (true) {
> byte[] bytes = new byte[1024];
> //do some unrelated stuff
> bytes = null;
> }
>> Will the array be allocated each time the loop runs or will the
> compiler remove it because it is not used in the method?
No, GCJ is not yet smart enough to do this sort of optimization. It
shouldn't be too difficult to add, however, with the tree-ssa framework.
But, we tend to assume that developers are smart enough to not write
such code - there are other areas where smarter optimizations by the
compiler should yield broader benefits - type and bounds check
elimination, for example.
> What about if it is a public instance variable?
If its a public variable, the opportunities to optimize are much more
limited. You could eliminate the allocation only if there are no calls
to external methods, unless you can prove that every method you call
could never try to access that variable. The existence of
synchronization may also effect this -
Note that an easy way to determine if gcj implements a certain
optimization is often to "gcj -O2 -S File.java" and look at the asm output.
Regards
Bryce
More information about the Java
mailing list