OK, das sollte wirklich jemand von Google gefragt werden, aber ich möchte nur andere Meinungen.
Selbst Android unterstützt native Codeanwendungen. Das Hauptentwicklungstool ist Java. Aber wieso? Ich meine, ist es nicht zu langsam, Code auf einem mobilen Gerät zu interpretieren? Bei der Einführung von Froyo sagte Google, dass der neue JIT-Compiler 2-5-mal schnellere Anwendungen erzielen kann. Dies bedeutet, dass die Verwendung von Java über nativen Code 2-mal langsamer ist.
Ja, ich weiß, dass die Verwendung von verwalteten Codeanwendungen im Hinblick auf die Systemstabilität sicherer ist, da die virtuelle Maschine eine bessere Kontrolle über das Programm hat. Dennoch ist dieser Leistungsabfall enorm und ich sehe keinen Grund, warum ich sie verwenden soll.
Antworten:
Ein paar Punkte:
Java ist eine bekannte Sprache, Entwickler kennen sie und müssen sie nicht lernen
Es ist schwieriger, sich mit Java zu fotografieren als mit C / C ++ - Code, da es keine Zeigerarithmetik gibt
Es wird in einer VM ausgeführt, sodass es nicht für jedes Telefon neu kompiliert werden muss und einfach zu sichern ist
große Anzahl von Entwicklungstools für Java (siehe Punkt 1)
Einige Mobiltelefone verwendeten bereits Java ME, sodass Java in der Branche bekannt war
Der Geschwindigkeitsunterschied ist für die meisten Anwendungen kein Problem. Wenn ja, sollten Sie in einer einfachen Sprache codieren
quelle
Auf der Bytecode-Ebene verwendet Android kein Java. Die Quelle ist Java, es wird jedoch keine JVM verwendet.
quelle
Die Verbesserung der Systemstabilität ist bei einem Gerät wie einem Mobiltelefon sehr wichtig .
Sicherheit ist noch wichtiger. In der Android-Umgebung können Benutzer semi-vertrauenswürdige Apps ausführen, die das Telefon ohne hervorragende Sicherheit auf wirklich unangenehme Weise ausnutzen können. Indem Sie alle Apps in einer virtuellen Maschine ausführen, stellen Sie sicher, dass keine App den Betriebssystemkernel ausnutzen kann, es sei denn, die VM-Implementierung weist einen Fehler auf. Die VM-Implementierung wiederum ist vermutlich klein und verfügt über eine kleine, genau definierte Sicherheitsoberfläche.
Am wichtigsten ist vielleicht, dass Programme, die zum Code für eine virtuelle Maschine kompiliert werden, nicht für neue Hardware neu kompiliert werden müssen. Der Markt für Telefonchips ist vielfältig und verändert sich schnell. Das ist eine große Sache.
Durch die Verwendung von Java ist es außerdem weniger wahrscheinlich, dass die von den Benutzern geschriebenen Apps selbst ausgenutzt werden können. Keine Pufferüberläufe, Fehler mit Zeigern usw.
quelle
Native Code ist nicht unbedingt schneller als Java-Code. Wo zeigen Ihre Profildaten, dass nativer Code schneller ausgeführt werden kann?
Warum Java?
Android läuft auf vielen verschiedenen Hardwareplattformen. Sie müssten Ihren nativen Code für jede dieser verschiedenen Plattformen kompilieren und optimieren, um echte Vorteile zu erzielen.
Es gibt eine große Anzahl von Entwicklern, die Java bereits beherrschen.
Java bietet eine enorme Open Source-Unterstützung mit vielen Bibliotheken und Tools, die Entwicklern das Leben erleichtern.
Java schützt Sie vor vielen Problemen, die mit nativem Code verbunden sind, wie Speicherlecks, schlechte Zeigernutzung usw.
Mit Java können sie Sandbox-Anwendungen erstellen und ein besseres Sicherheitsmodell erstellen, sodass eine schlechte App nicht Ihr gesamtes Betriebssystem herunterfahren kann.
quelle
Erstens verwendet Android laut Google kein Java. Deshalb verklagt Oracle Google. Oracle behauptet, dass Android gegen eine Java-Technologie verstößt, aber Google sagt, es sei Dalvik.
Zweitens habe ich seit 1995 keinen Java-Bytecode-Interpreter mehr gesehen.
Können Sie Ihre Leistungsvermutung mit einigen tatsächlichen Benchmarks untermauern? Der Umfang Ihrer Vermutungen erscheint angesichts der von Ihnen angegebenen ungenauen Hintergrundinformationen nicht gerechtfertigt.
quelle
Java hat ein ziemlich überzeugendes Argument für Google, das es in Android verwendet: Es hat eine riesige Basis von Entwicklern. Alle diese Entwickler sind (irgendwie) bereit, für ihre mobile Plattform zu entwickeln.
Beachten Sie, dass Android technisch gesehen kein reines Java verwendet.
quelle
Wie bereits an anderer Stelle erwähnt, besteht das Hauptproblem darin, dass Android als tragbares Betriebssystem für die Ausführung auf einer Vielzahl von Hardware konzipiert ist. Es baut auch auf einem Framework und einer Sprache auf, die vielen bestehenden mobilen Entwicklern vertraut sind.
Schließlich würde ich sagen, dass dies eine Wette gegen die Zukunft ist - unabhängig davon, welche Leistungsprobleme bestehen, wird mit der Verbesserung der Hardware irrelevant -, und indem Entwickler Entwickler dazu bringen, gegen eine Abstraktion zu programmieren, kann Google das zugrunde liegende Betriebssystem weitaus einfacher herausreißen und ändern, als wenn Entwickler codierten auf die POSIX / Unix-APIs.
Für die meisten Anwendungen ist der Aufwand für die Verwendung einer VM-basierten Sprache über native nicht wesentlich (der Engpass für Apps, die Webdienste wie Twitter nutzen, besteht hauptsächlich im Netzwerk). Das Palm WebOS demonstriert dies ebenfalls - und das verwendet JavaScript anstelle von Java als Hauptsprache.
Da fast alle VMs JIT bis auf nativen Code kompiliert werden, ist die Geschwindigkeit des Rohcodes häufig mit der Geschwindigkeit des nativen Codes vergleichbar. Viele Verzögerungen, die höheren Sprachen zugeschrieben werden, haben weniger mit dem VM-Overhead zu tun als mit anderen Faktoren (komplexe Objektlaufzeit, Sicherheitsüberprüfung des Speicherzugriffs durch Überprüfung der Grenzen usw.).
Denken Sie auch daran, dass unabhängig von der Sprache, in der eine Anwendung geschrieben wird, ein Großteil der eigentlichen Arbeit in APIs niedrigerer Ebene ausgeführt wird. Die Sprache der obersten Ebene verkettet häufig nur API-Aufrufe.
Es gibt natürlich viele Ausnahmen von dieser Regel - Spiele, Audio- und Grafik-Apps, die die Grenzen der Telefonhardware überschreiten. Selbst unter iOS greifen Entwickler häufig auf C / C ++ zurück, um in diesen Bereichen Geschwindigkeit zu erzielen.
quelle
Die neue JIT führt die Anwendungen zwei- bis fünfmal schneller aus als die alte dalvikVM (beide JAVA). Der Vergleich ist also nicht C über JAVA, sondern JIT über dalvikVM.
quelle
Zuallererst ist es ungefähr dasselbe wie bei Windows Mobile oder dem iPhone. Das .net-Framework benötigt eine eigene VM sowie Kakao.
Und selbst wenn die Leistung nicht optimal ist, weil es sich um eine Interpretation des Bytecodes handelt, bringt Android die gesamte Java-Community als potenzielle Entwickler mit. Mehr Anwendungen, mehr Kunden usw.
Zum Schluss ist keine Leistung so schlecht, deshalb wird Java auch auf kleineren Geräten verwendet (siehe JavaMe).
quelle