On 04/25/2012 10:23 AM, Fredrik Öhrström wrote: >>> That's a lot of optimization that I otherwise wouldn't have to do, if >>> only boxed types and constant propagation worked well, but yeah, I see >>> how it can work now. > > Clearly the C1/C2 compiler needs to be improved. In the meantime > you have to work around their limitations.
Thanks for confirming. >> BTW, I've patched the JIT to consider all final fields of a class of >> java/lang as truly final >> but that not enough for having the escape analysis to work with integers. >> It seems that because of the cache used in Integer.valueOf(), the JIT >> considers >> that the Integers are not escapable. > > I think System.out and System.err are final, but they are in fact > set during the start of the jvm. Just so that you take that into > account, in case any optimizations would happen that early. > (There are probably more examples of this.) That and System.setOut/setErr that updates them any time during the runtime. > The escape analysis in C2 is broken, combining that with > the limited amount of boxing removal support, and the cache > of Integer.valueOf, you get a bad optimizations. > > At least we have an intern right now in Stockholm who is > working on porting the JRockit autoboxing removal optimizations > to C2. Yay! Great. (And it was nice talking to you in JAX!) -- Kohsuke Kawaguchi http://kohsuke.org/ _______________________________________________ mlvm-dev mailing list mlvm-dev@openjdk.java.net http://mail.openjdk.java.net/mailman/listinfo/mlvm-dev