Werbung

Überlegen Sie derzeit, ob Sie Java für Ihre nächste Anwendung oder native Toolkits und Frameworks verwenden sollen? Möchten Sie wissen, welche Vorteile Java gegenüber der nativen Programmierung für eine 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 spezifische Hardware geschrieben wurde, auf der dieses Betriebssystem ausgeführt wird. Es ist meist in einer Sprache wie C / C ++ geschrieben. Der C / C ++ - Quellcode wird mithilfe eines Compilers zu einem Objektformular kompiliert, das dann durch Verknüpfen der erforderlichen Bibliotheken zu einer ausführbaren Datei zusammengesetzt wird. Ein auf diese Weise erstelltes Programm wird auf der spezifischen Hardware und dem Betriebssystem ausgeführt, für die es erstellt wurde, funktioniert jedoch möglicherweise nicht ordnungsgemäß auf anderen Systemen.

Vorbereiten einer nativen ausführbaren Datei

Warum sind native Anwendungen nicht portabel?

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

Darüber hinaus unterscheidet sich das neue Betriebssystem möglicherweise vom ursprünglichen und erkennt die Programmdatei möglicherweise nicht einmal 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 ein bloßes Upgrade des Compilers auf die nächste Version zu grundlegenden Änderungen führen kann. Ihr Code muss möglicherweise repariert werden, um mit dem neueren Compiler zu arbeiten. Als solches wird der Quellcode mit dem bespritzt, was als bekannt ist ifdef Anweisungen zum Isolieren von hardware-, betriebssystem- oder compilerspezifischen Problemumgehungen sind häufig.

Das Folgende ist ein kleiner Code-Ausschnitt aus BZLib-Komprimierungsbibliothek was die Verwendung von veranschaulicht ifdefs, um Plattform-Besonderheiten zu isolieren:

#ifdef _WIN32. # include # ifdef small / * windows.h definiere small to char * / # undef klein. # endif. # ifdef BZ_EXPORT. # definiere BZ_API (func) WINAPI func. # BZ_EXTERN extern definieren. # else / * Windows DLL dynamisch importieren * / # definiere BZ_API (func) (WINAPI * func) # definiere BZ_EXTERN. # endif. #sonst. # definiere BZ_API (func) func. # BZ_EXTERN extern definieren. #endif.

Quellcode-Portabilität über Betriebssysteme hinweg

Diese Situation kann bis zu einem gewissen Grad durch erneutes Kompilieren des C / C ++ - Quellcodes auf die neue CPU gemildert werden. Das Betriebssystem für die neue CPU kann jedoch unterschiedlich sein. Und der Quellcode kann möglicherweise nicht ohne Änderungen kompiliert werden, egal ob Major oder Minor. Selbst geringfügige Änderungen an Betriebssystemversionen erfordern möglicherweise einige Änderungen des Quellcodes.

Und wenn Sie unterschiedliche Betriebssysteme wie Windows und Linux / UNIX in Betracht ziehen, ist Portabilität ein völlig neues Ballspiel. Wenn Sie kein Toolkit oder Framework verwenden, das Sie vollständig vom Betriebssystem isoliert, ist die Portabilität des Quellcodes nicht möglich. Dies liegt daran, dass die Betriebssystemschnittstelle zwischen diesen Systemen völlig unterschiedlich ist. Wenn Sie in den entferntesten Ecken Ihres Codes Betriebssystemprimitive direkt verwenden, kann Ihr Code nicht auf diese verschiedenen Betriebssysteme übertragen werden.

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 zum Programmieren für diese Maschine. Sie können beispielsweise die verfügbare Speichermenge, die Anzahl der CPUs, die Netzwerkschnittstellen usw. der virtuellen Maschine abfragen.

Code für die Ausführung der virtuellen Maschine

Wie werden Java-Anwendungen erstellt?

Die Java-Sprache bietet einen Java-Compiler, der den Quellcode in Objektcode übersetzt. Der Objektcode wird dann von der ausgeführt Java virtuelle MaschineDies 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 nun vom Anwendungsprogrammierer zum Hersteller der Java Virtual Machine verlagert. Der Anwendungsprogrammierer schreibt die Software unter Verwendung der Grundelemente der Java-Sprache und des Java Die virtuelle Maschine ist für die Übersetzung dieser Grundelemente in das Host-Betriebssystem verantwortlich Anlagen. Wenn eine neue Version des Betriebssystems herauskommt, liegt es in der Verantwortung des Anbieters, die Java Virtual Machine so zu aktualisieren, dass sie auf dem neuen Betriebssystem ordnungsgemäß funktioniert.

Erstellen von Java-Programmen

Was sind die Vorteile der Java Virtual Machine?

Wie bereits erwähnt, bietet die Java Virtual Machine 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, ein Netzwerk, 3D-Grafiken, mehrere CPUs usw. zugreifen. ohne auf Anrufe auf niedriger Ebene zurückgreifen zu müssen, die das Programm letztendlich nicht portierbar machen.

Ein Java-Programm wird geschrieben und mit dem Java-Compiler kompiliert. Der resultierende Objektcode (aufgerufen Bytecode) kann zu einem anderen Host-Betriebssystem transportiert werden, das auf unterschiedlicher Hardware ausgeführt wird, und sollte problemlos ausgeführt werden.

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 bezieht sich auf die Laufzeitoptimierungen, die die JVM auf den Bytecode anwendet, damit dieser auf der aktuellen CPU besser ausgeführt wird.

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

Zusammenfassend lässt sich sagen, dass eine native Anwendung für eine bestimmte Hardware und ein bestimmtes Betriebssystem erstellt wurde. Eine Java-Anwendung folgt dagegen a Einmal erstellen, überall ausführen Philosophie, indem eine JVM die kompilierten Bytecode-Anweisungen 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 aufgrund der Portabilität auf Java umsteigen? Oder umgekehrt aufgrund von Leistungsproblemen? Lass es uns in den Kommentaren unten wissen.

Bildnachweis: Profit_Image über Shutterstock.com