bytecode, which is executed by a Java virtual machine • Android bytecode is interpreted by Dalvik virtual machine • On Android 5+ bytecode is compiled into native instructions that are executed by the device's runtime environment (ART) • Kotlin also runs on the JVM