Warum die Java Virtual Machine Ihren Code besser laufen lässt

Warum die Java Virtual Machine Ihren Code besser laufen lässt / Programmierung

Diskutieren Sie derzeit, ob Sie Java für Ihre nächste Anwendung oder native Toolkits und Frameworks verwenden möchten? Möchten Sie wissen, welche Vorteile Java gegenüber der nativen Programmierung einer Anwendung bietet? Lesen Sie weiter, um es herauszufinden!

Was ist eine native Anwendung??

Eine native Anwendung ist ein Programm, das speziell für ein Betriebssystem (OS) und möglicherweise für die bestimmte Hardware geschrieben wurde, auf der das Betriebssystem ausgeführt wird. Es ist meistens in einer Sprache wie C / C ++ geschrieben. Der C / C ++ - Quellcode wird mithilfe eines Compilers in ein Objektformular kompiliert, das dann durch Verknüpfen der erforderlichen Bibliotheken zu einer ausführbaren Datei zusammengestellt wird. Ein auf diese Weise erstelltes Programm wird auf der spezifischen Hardware und dem Betriebssystem ausgeführt, für das es erstellt wurde, auf anderen Systemen funktioniert es jedoch möglicherweise nicht ordnungsgemäß.

Warum sind native Anwendungen nicht portabel??

Ein Compiler für eine Sprache wie C / C ++ übersetzt Quellcodeanweisungen für die Ziel-CPU in Maschinensprache. Wenn Sie versuchen, diesen Code auf einer anderen CPU auszuführen, funktioniert das Programm möglicherweise nicht ordnungsgemäß (oder funktioniert überhaupt nicht), da die Maschinenspracheanweisungen im kompilierten Code möglicherweise nicht von dieser CPU unterstützt werden.

Darüber hinaus unterscheidet sich das neue Betriebssystem möglicherweise vom ursprünglichen Betriebssystem und erkennt möglicherweise nicht einmal die Programmdatei als ausführbare Datei. Dies liegt an unterschiedlichen Dateiformaten, die für ausführbare Dateien unter verschiedenen Betriebssystemen (wie Windows, Linux, MacOS usw.) verwendet werden..

Die Portabilität ist bei nativen Anwendungen ein so großes Problem, dass durch ein Upgrade des Compilers auf die nächste Version bahnbrechende Änderungen entstehen können. Möglicherweise muss Ihr Code korrigiert werden, um mit dem neueren Compiler arbeiten zu können. Als solches Splattering des Quellcodes mit so genannten ifdef Anweisungen zum Isolieren von Hardware-, Betriebssystem- oder Compilerspezifischen Problemumgehungen sind üblich.

Das folgende ist ein kleines Code-Snippet aus der BZLib-Komprimierungsbibliothek, das die Verwendung von veranschaulicht ifdefs, um die Besonderheiten der Plattform zu isolieren:

#ifdef _WIN32 # include  # ifdef small / * windows.h Definiere small bis char * / # undef small # endif # ifdef BZ_EXPORT # define BZ_API (func) WINAPI func # define BZ_EXTERN (WINAPI * func) # define BZ_EXTERN # endif #else # define BZ_API (func) func # definiere BZ_EXTERN extern #endif 

Quellcode-Portabilität über Betriebssysteme hinweg

Diese Situation kann bis zu einem gewissen Grad gemildert werden, indem der C / C ++ - Quellcode auf die neue CPU neu kompiliert wird. Das Betriebssystem für die neue CPU kann jedoch anders sein. Und der Quellcode wird möglicherweise nicht ohne Änderungen kompiliert, egal ob Dur oder Moll. Selbst geringfügige Änderungen in Betriebssystemversionen erfordern möglicherweise einige Änderungen am Quellcode.

Und wenn Sie unterschiedliche Betriebssysteme wie Windows und Linux / UNIX in Betracht ziehen, ist Portabilität ein völlig neues Spiel. Wenn Sie kein Toolkit oder ein Framework verwenden, das Sie vollständig vom Betriebssystem isoliert, ist die Portierbarkeit von Quellcode nicht möglich. Dies liegt daran, dass die Betriebssystemschnittstelle zwischen diesen Systemen völlig unterschiedlich ist. Wenn Sie in den am weitesten entfernten Ecken Ihres Codes beliebige Betriebssystem-Grundelemente direkt verwenden, ist Ihr Code nicht für diese verschiedenen Betriebssysteme portierbar.

Wie unterscheidet sich Java??

In diesem Szenario liefert Java ein neues Paradigma, eine neue Art, Software zu erstellen. Wenn Sie in Java programmieren, zielen Sie auf a virtuelle Maschine. Eine solche Maschine existiert als Konzept, und die Java-Sprache bietet Schnittstellen für die Programmierung dieser Maschine. Sie können beispielsweise die verfügbare Speichermenge, die Anzahl der CPUs, die Netzwerkschnittstellen usw. der virtuellen Maschine abfragen.

Wie werden Java-Anwendungen erstellt??

Die Java-Sprache stellt einen Java-Compiler bereit, der Quellcode in Objektcode übersetzt. Der Objektcode wird dann von der ausgeführt Java virtuelle Maschine, Dies ist ein vom Compiler getrenntes Programm. Das Betriebssystem wiederum betrachtet die virtuelle Java-Maschine als ein weiteres Programm, das auf diesem Betriebssystem ausgeführt wird.

Die Last der Portabilität hat sich jetzt vom Anwendungsprogrammierer zum Java Virtual Machine-Anbieter verlagert. Der Anwendungsprogrammierer schreibt die Software unter Verwendung der Grundelemente der Java-Sprache, und die virtuelle Java-Maschine ist für die Übersetzung dieser Grundelemente in die Host-Betriebssystemeinrichtungen verantwortlich. Wenn eine neue Version des Betriebssystems herauskommt, ist der Hersteller dafür verantwortlich, die virtuelle Java-Maschine zu aktualisieren, damit sie unter dem neuen Betriebssystem ordnungsgemäß funktioniert.

Was sind die Vorteile der Java Virtual Machine??

Wie bereits erwähnt, bietet die virtuelle Java-Maschine dem Anwendungsprogrammierer eine virtuelle Ansicht des Betriebssystems und der Hardware. Diese virtuelle Ansicht besteht aus verschiedenen Schnittstellen und Methoden und dient dazu, den Anwendungsprogrammierer von den Unterschieden im Host-Betriebssystem und der zugrunde liegenden Hardware zu isolieren. Somit kann der Anwendungsprogrammierer auf Einrichtungen wie ein Windowing Toolkit, Netzwerk, 3D-Grafik, mehrere CPUs usw. zugreifen, ohne auf Anrufe auf niedriger Ebene zurückgreifen zu müssen, die das Programm letztendlich nicht tragbar machen.

Ein Java-Programm wird geschrieben und mit dem Java-Compiler kompiliert. Der resultierende Objektcode (aufgerufen Bytecode) kann zu einem anderen Hostbetriebssystem transportiert werden, das auf anderer Hardware läuft und sollte ohne Probleme laufen.

JIT-Compiler

Die virtuelle Java-Maschine verwendet a JIT-Compiler um den Bytecode speziell für die Ziel-CPU zu optimieren. JIT steht für Gerade rechtzeitig und verweist auf die Laufzeitoptimierungen, die die JVM auf den Bytecode anwendet, damit sie auf der aktuellen CPU besser ausgeführt wird.

Ein weiterer Vorteil der Verwendung der Java Virtual Machine ist, dass verschiedene Optimierungen für verschiedene Anwendungsfälle mit dem gleichen Bytecode angewendet werden können. Die Oracle-JVM bietet beispielsweise zwei Optionen zum Ausführen des Bytecodes: einen Servermodus und einen Clientmodus. Der Servermodus wird für lange laufende Serverprogramme optimiert, während der Client-JVM-Modus für schnelle Antwortzeiten optimiert wird, da er wahrscheinlich im interaktiven Modus verwendet wird.

Zusammenfassend kann gesagt werden, dass eine native Anwendung für eine bestimmte Hardware und ein bestimmtes Betriebssystem erstellt wird. Eine Java-Anwendung dagegen folgt a Einmal bauen, überall ausführen Philosophie, indem eine JVM die kompilierten Bytecodeanweisungen ausführt. Während native Anwendungen traditionell als leistungsfähiger als Java-Anwendungen angesehen wurden, ist dies aufgrund der Verwendung eines JIT-Compilers durch die JVM möglicherweise nicht immer der Fall.

Haben Sie eine native Anwendung entwickelt und mussten Sie aufgrund der Portabilität auf Java umstellen? Oder umgekehrt aufgrund von Leistungsproblemen? Lass es uns in den Kommentaren wissen.

Bildnachweis: Profit_Image über Shutterstock.com

Erfahren Sie mehr über: Java.