Bytecode can be translated quite well to native code. So I'm wondering if this isn't about "VMs versus native" as much as it is about "garbage collected versus unmanaged memory".
Bytecode can be translated quite well to native code. So I'm wondering if this isn't about "VMs versus native" as much as it is about "garbage collected versus unmanaged memory".
I think the performance differences between JIT compiled code and native code mainly come from the 'convenience' features offered by languages such as Java or C#. I am thinking of garbage collection, (default) virtual functions or reflection.
In let's say c++ you can do all of these things too, but the cost is not hidden from the developer.
I believe that is how .NET works (the byte code gets distributed, and the user compiles it to native immidietly before execution).
Also, Android's ART is the replacement for Dalvik that compiles Dalvik bytecode into native code at installation.
Why do you say this? There's lots of examples out there and Android is one of them.