Was können Sie nicht tun, die auf der Dalvik VM (Android VM), die Sie sich in der Sonne VM?

StackOverflow https://stackoverflow.com/questions/230193

  •  04-07-2019
  •  | 
  •  

Frage

Ich weiß, dass Sie laufen fast alle in Java Dalvik VM Sie können in Java VM aber die Einschränkungen sind nicht sehr klar.Hat jemand einen großen Stolpersteine?Alle großen Bibliotheken haben Sie Probleme?Alle Sprachen, die kompiliert zu Java-byte-code (Scala, Jython usw...) funktionieren nicht wie erwartet?

War es hilfreich?

Lösung

Es gibt eine Reihe von Dingen, die Dalvik nicht behandelt oder nicht behandelt, ganz auf die gleiche Weise als standard-Java-bytecode, obwohl die meisten von Ihnen sind ziemlich hoch.

Die die meisten schweren Beispiel ist Laufzeit-bytecode-Generierung und benutzerdefinierte Klasse laden.Angenommen, Sie erstellen möchten einige bytecode und dann verwenden classloader zu laden es für Sie, wenn dieser trick funktioniert auch auf Ihrem normalen Computer, wird es garantiert nicht funktioniert, Dalvik, es sei denn, Sie ändern Ihre bytecode generation.

Verhindert, dass Sie von der Nutzung bestimmter dependency injection-frameworks, bekannteste Beispiel ist Google Guice (obwohl ich bin sicher, dass einige Leute auf, die arbeiten).Auf der anderen Seite AspectJ sollte funktionieren, da es verwendet die bytecode-Instrumentierung als eine Zusammenstellung von Schritt (obwohl ich weiß nicht, wenn jemand versucht).

Anderen jvm-Sprachen-alles, am Ende kompiliert zu standard-bytecode und nicht bytecode-Instrumentierung zur Laufzeit umgewandelt werden können, um Dalvik und sollte funktionieren.Ich kenne Leute, habe Jython ausführen, die auf Android und es funktionierte ok.

Andere Sache zu beachten ist, dass es keine just-in-time-Kompilierung.Dies ist nicht unbedingt Dalviks problem (Sie können immer kompilieren alle bytecode-on-the-fly, wenn Sie möchten), aber, dass Android nicht unterstützt, und es ist unwahrscheinlich, dies zu tun.In der Wirkung, während microbenchmarking für standard-Java-war nutzlos -- Komponenten hatten unterschiedliche Laufzeit characterstics in tests als Teil größerer Systeme -- microbenchmarks für Android-Handys, die Total Sinn machen.

Andere Tipps

Wenn Sie sehen,"Dalvik Virtual Machine internals"Google IO-session, die Sie finden können Dalvik nicht unterstützt generational GC.

Also, es könnte die Leistung beeinträchtigen häufige Objekt erstellen und löschen.Java VM unterstützt generational GC so, wäre es besser, GC-Leistung für die gleiche situation.

Und auch, Dalvik verwendet trace-granuality JIT anstelle von Methode granuality JIT.

Eine andere Sache, die ich denke, könnte hier Hinzugefügt werden, dass Dalvik offenbar nicht erhalten die Halbbild-Reihenfolge bei der Auflistung der Felder einer Klasse mit Hilfe der reflection-API.Nun, das reflection-API macht keine Garantien für die es sowieso (so im Idealfall sollten Sie nicht davon abhängen, sowieso), aber die meisten anderen VMs gibt do beibehalten der Reihenfolge.

Nur um die Unterhaltung, nicht beabsichtigt, wieder zu beleben eine alte thread.Ich lief einfach über diese bei meiner Suche, und möchte hinzufügen, dass Jython funktioniert nicht out of the box Dalvik entweder.Einfach versuchen zu tun, ein Hallo-Welt-Beispiel wird Folgendes ergeben:

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top