The latest specification of the JVM (JVMS 7) introduced a new instruction: invokedynamic designed by the JSR 292 Expert Group to make easier the implementation of dynamic typed languages like Python, Ruby, SmallTalk... on top of the JVM.
This JSR also provides a new Java package java.lang.invoke that exposes Virtual Machine internal mechanisms through a standardized API allowing dynamic language runtimes to be more efficient.
The current version of Dalvik, the virtual machine of Android, is compatible with the Java specification 6 thus doesn't provide the invokedynamic instruction. That's why most of the developers of dynamic languages that support Android provide two runtimes, one compatible with the JVMS 6 and an other compatible with the JVMS 7.
One goal of my thesis is to provide a full implementaion of the JSR 292 on Dalvik. But Android is a constrained environment that make most of the tricks used by the desktop/server VMs like Hotspot (Oracle JVM) and J9 (IBM JVM) either inefficient or harmful.
After an introduction explaining how invokedynamic works and how it is used to optimize dynamic languages. I will present some tricks used by Hotspot to implement invokedynamic, why some of them can not be used by Dalvik and I will finish with some ideas of implementations on Dalvik.
Speakers: Jérôme Pilliet