So che è possibile eseguire quasi tutto Java in VM di Dalvik che è possibile in VM di Java ma le limitazioni non sono molto chiare. Qualcuno ha incontrato grossi ostacoli? Qualche libreria importante ha problemi? Qualsiasi lingua che compila il codice byte Java (Scala, Jython ecc.) Non funziona come previsto?Cosa non si può fare sulla VM di Dalvik (VM di Android) che è possibile in Sun VM?
risposta
C'è un numero di cose che Dalvik non gestirà o non gestirà allo stesso modo del bytecode Java standard, sebbene la maggior parte di esse sia abbastanza avanzata.
L'esempio più grave di è la generazione di codice bytecode e il caricamento della classe personalizzata. Diciamo che ti piacerebbe creare qualche bytecode e quindi usare classloader per caricarlo per te, se quel trucco funziona sulla tua macchina normale, è garantito che non funzioni su Dalvik, a meno che tu non modifichi la generazione del bytecode.
Ciò impedisce di utilizzare alcuni framework di dipendenze per l'iniezione, l'esempio più noto è Google Guice (anche se sono sicuro che alcune persone lavorino su questo). D'altra parte AspectJ dovrebbe funzionare in quanto utilizza la strumentazione bytecode come una fase di compilazione (anche se non so se qualcuno ha provato).
Per quanto riguarda altre lingue JVM - tutto ciò che, alla fine, viene compilato in bytecode standard non utilizza strumentazione bytecode durante il runtime possono essere convertiti in Dalvik e dovrebbe funzionare. So che le persone hanno eseguito Jython su Android e ha funzionato bene.
Un'altra cosa di cui essere a conoscenza è che non è disponibile la compilazione just in time. Questo non è un problema strettamente di Dalviks (puoi sempre compilare qualsiasi bytecode se lo desideri) ma Android non lo supporta ed è improbabile che lo faccia. In effetti, mentre il microbenchmarking per Java standard era inutile - i componenti avevano caratteri di runtime diversi nei test piuttosto che parti di sistemi più grandi - i microbenchmark per i telefoni Android erano assolutamente logici.
Se vedi "Dalvik Virtual Machine internals" sessione di Google IO, Dalvik non supporta generational GC.
Quindi, potrebbe peggiorare le prestazioni di creazione e cancellazione frequenti di oggetti. Java VM supporta GC generazionale quindi, mostrerebbe prestazioni GC migliori per la stessa situazione.
E inoltre, Dalvik utilizza trace-granuality JIT anziché il metodo di granularità JIT.
Un'altra cosa che immagino possa essere aggiunta qui è che Dalvik apparentemente non conserva l'ordine dei campi quando elenca i campi di una classe usando l'API di reflection. Ora, l'API di reflection non fornisce alcuna garanzia su di esso comunque (quindi idealmente non dovresti dipendere comunque da questo), ma la maggior parte delle altre VM fuori là do conserva l'ordine.
Solo per aggiungere alla conversazione, non destinato a far rivivere un thread precedente. Ho appena trovato questo nella mia ricerca, e voglio aggiungere che Jython non funziona immediatamente con Dalvik. Semplicemente cercando di fare un esempio ciao mondo produrrà il seguente:
- 1. Garbage collection in dalvik vm
- 2. significato di Dalvik codici VM VFY
- 3. debug interprete in VM quando si cambia primitive vm
- 4. L'androide dalvik vm utilizza l'ottimizzazione dell'analisi di escape?
- 5. Che cosa fa/mean l'argomento -XstartOnFirstThread VM?
- 6. si blocca su all'avvio VM
- 7. è possibile determinare se l'attuale VM è Java SE o Dalvik?
- 8. È disponibile una Dart VM?
- 9. di riferimento con VM, piuttosto che $ portata
- 10. Copia file in Azure VM
- 11. UIImemoria di memoria non deallocante VM: ImageIO_JPEG_DATA?
- 12. Che cosa significa "VM anonima" negli strumenti di allocazione?
- 13. Perché VM Tracker è vuoto?
- 14. Vagrant "VM non creata." durante il tentativo di creare una casella dalla VM esistente
- 15. Memoria VM Limit Python
- 16. Jenkins - Usa Genymotion VM invece dell'emulatore Android
- 17. Impostazione Java VM line.separator
- 18. Che cosa significa avere una java VM biforcuta?
- 19. Che cosa utilizza Flash VM per disegnare sotto il cofano?
- 20. Quali sono le alternative alla VM Java?
- 21. Scrittura di una VM - bytecode ben formato?
- 22. Avvio di VM Vagrant su avvio host
- 23. Dart VM - browser stranieri (non Google)
- 24. Descrizione concisa della Lua vm?
- 25. Passo VM argomento di Apache Tomcat
- 26. Come si imposta l'opzione eclipse.ini -vm?
- 27. Perché l'immagine della VM personalizzata non viene visualizzata in Azure Create VM Interface?
- 28. LibSass.x64 non trovato su Azure VM (virtocommerce)
- 29. argomenti di default VM in Eclipse: -javaagent
- 30. Inter-comunicazione di rete virtuale VM Azure
Alcuni aggiornamenti: C'è una versione speciale di Guice che funzionerà su Android. http://code.google.com/p/google-guice/downloads/detail?name=guice-2.0-no_aop.jar Google ha una squadra che lavora a un JIT per Android. http: // groups.google.com/group/android-platform/browse_thread/thread/331d5f5636f5f532 –
Da Android Froyo supporta il compilatore JIT trace-granularity. – Wonil
Google Guice funziona bene. Scopri http://roboguice.org per come usare guice su Android. – emmby