Dalvik is the main reason why Android became so popular.
The microbenchmark in the blog post ran in 922 milliseconds on the Google G1 (a.k.a. HTC Dream), or 520 without the assignment in the loop. On my K800i the corresponding numbers were 190–220 ms and 135–165 ms – although I had to scale the size of the buffer down from 1228800 to 1100000 elements due to lack of memory, but scaling the results up by that factor the K800i was still 3–4 times as fast as the G1.
Hardware-wise the G1 should have been much faster. It had an ARM11 at 528 MHz and the K800i had (I think) an ARM9 at somewhere around or below 200 MHz.
[1] http://web.archive.org/web/20091123074004/http://occipital.c...
The fact that you can use a lot of standard Java libs with Android was and is a huge boon that makes development significantly easier than the hell that was JavaMe.
Android fragmentation is no different than J2ME used to be.
1. Price - you can buy an unlocked Android device for $50.
2. It is free to manufacturers
3. No alternative for phone manufacturers at first. By the time Windows Phone git good enough, it was too late.
Every other commercial Java vendor in this planet doesn't have any issue using standard Java tools, compiling with Java licenses and deliver JVMs able to run in embedded devices with soft and hard real time constraints.
Google for all their might is a special snowflake not able to do what the rest of the Java world is capable of.