Google has been very quiet about ART generated code quality. I haven't found any benchmarks that would compliment its performance either. It's probably better than Dalvik but worse than mature optimizing compilers.
Nowadays calling a .so/.dylib/.dll function, or accessing a thread-local variable also generates lots of cruft code that could possibly get optimized once the data is loaded. It won't always work (shared libraries can't be unloaded, but with enough hints, or assumptions that this would never be done, one can gain some benefits). On the negative this may reduce the code-sharing across processes.
The fact that ART makes use of dex bytecode as portable executable format[0] complicates the matter for those not versed in compiler design.
So people see bytecode and think managed, when a bytecode format doesn't have anything to do with being interpreted or compiled to native code.
[0] An old idea that goes back to the mainframe days and used by quite a few other languages.
Not sure why I'm being downvoted:
> The big paradigm-shift that ART brings, is that instead of being a Just-in-Time (JIT) compiler, it now compiles application code Ahead-of-Time (AOT). The runtime goes from having to compile from bytecode to native code each time you run an application, to having it to do it only once, and any subsequent execution from that point forward is done from the existing compiled native code.
http://www.anandtech.com/show/8231/a-closer-look-at-android-...
That sounds like native code compilation to me.