by glen herrmannsfeldt <gah@[EMAIL PROTECTED]
>
Sep 27, 2007 at 06:06 PM
Christopher Diggins wrote:
> Quick question about optimizing JVM bytecode. Suppose I have the
> following Java code:
> public static void main(String[] args) {
> int a[] = new int[42];
> for (int i=0; i < a.length; ++i)
> a[i] = 1;
> int sum = 0;
> for (int i=0; i < a.length; ++i)
> sum = sum + a[i] ;
> System.out.println(sum);
> }
> Would it be okay if I wrote an optimizer that pre-evaluated the code
> and just generated byte-code that output the value 42?
This is very common for optimizers for other languages. My
understanding for Java is that the exception model limits some
optimizations that might otherwise be possible. In this case
you can easily show that no exceptions will occur so it should
be legal.
The only one I can see that could possibly happen is that
yours would still work even if not enough memory was available.
Consider the slightly different:
public static void main(String[] args) {
int a[] = new int[1000000000];
for (int i=0; i < a.length; ++i)
a[i] = 1;
int sum = 0;
for (int i=0; i < a.length; ++i)
sum = sum + a[i] ;
System.out.println(sum);
}
This would fail on most systems without optimization, but with
yours it would not fail. In more complicated programs there is
interaction with other uses of memory.
-- glen