http://anandtech.com/show/8231/a-closer-look-at-android-runtime-art-in-android-l
I'm a bit surprised to see Android move to AOT compilation, together with large claimed performance benefits. As far as I know, aside from ART, all state of the art Java Runtimes are using JIT. In theory, JIT should have the advantage of having live profile data, the ability to speculatively do optimization and back off when they're wrong, etc...
The article list a bunch of benefits, but they don't really seem to stand up to scrutiny. Overhead from repeatedly having to JIT the code? Cache it - also removing the battery life argument. AoT having the advantage of seeing all the code and do global optimizations? It's just the opposite!
I could see some advantage of AoT for first-startup, but that isn't even claimed as an advantage, because the AoT happens at install, not at compilation/packaging time.
It's even stranger as modern Android phones have 4 to even 8 cores. That leaves plenty of horsepower to do the JITing in the background and be even faster.
Now, I can see that ART is faster simply because it's a better, second iteration on Dalvik (which wasn't great). Dalvik was 2-3 times slower than standard JITs. ART seems to make up this difference, but that still leaves the question: why did Google choose to go the AoT route instead of JIT?
Secondly there are limits to how much you can optimize at run time. For servers there is more leeway in terms of available memory and CPU power but on mobile you can only optimize so much without slowing things down with optimization and jit code generation overhead.
JIT generated code has to be generated every time the app runs. Besides the pages used to store the JIT code are process private - I.e. no sharing.
Compared to all of this - AOT can afford to optimize more, it only has to do it once, the framework code can be spit out to common shared files on the disk this enabling sharing of those pages and reducing memory consumption. This gives you speed, battery and memory benefits over JIT.