Es gibt eine Reihe von Dingen, die Dalvik nicht oder nicht auf die gleiche Weise wie der Standard-Java-Bytecode handhabt, obwohl die meisten von ihnen ziemlich fortgeschritten sind.
Le site Das gravierendste Beispiel ist die Erzeugung von Bytecode zur Laufzeit und das Laden benutzerdefinierter Klassen. Nehmen wir an, Sie möchten einen Bytecode erstellen und dann Classloader verwenden, um ihn für Sie zu laden. Wenn dieser Trick auf Ihrem normalen Rechner funktioniert, wird er garantiert nicht auf Dalvik funktionieren, es sei denn, Sie ändern Ihre Bytecode-Generierung.
Das hindert Sie daran, bestimmte Dependency-Injection-Frameworks zu verwenden, das bekannteste Beispiel ist Google Guice (obwohl ich sicher bin, dass einige Leute daran arbeiten). Auf der anderen Seite sollte AspectJ funktionieren, da es Bytecode-Instrumentierung als Kompilierungsschritt verwendet (obwohl ich nicht weiß, ob jemand versucht hat).
Was andere JVM-Sprachen angeht - alles, was letztendlich zu Standard-Bytecode kompiliert und keine Bytecode-Instrumentierung zur Laufzeit verwendet, kann in Dalvik konvertiert werden und sollte funktionieren. Ich weiß, dass Leute Jython auf Android ausgeführt haben und es hat gut funktioniert.
Außerdem ist zu beachten, dass es keine Just-in-Time-Zusammenstellung . Dies ist kein reines Dalvik-Problem (man kann jederzeit jeden Bytecode on the fly kompilieren, wenn man möchte), sondern dass Android dies nicht unterstützt und wahrscheinlich auch nicht tun wird. Während Microbenchmarking für Standard-Java nutzlos war - Komponenten hatten in Tests andere Laufzeiteigenschaften als als Teile größerer Systeme - machen Microbenchmarks für Android-Telefone durchaus Sinn.