Warum ist Java Platform Independent Language?

Veröffentlicht: 2021-02-08

Inhaltsverzeichnis

Einführung

Java hat seit seiner Geburt unter allen anderen Programmiersprachen eine enorme Popularität erlangt. Und der Grund für eine so immense Resonanz ist die Fähigkeit, einzigartige Funktionen bereitzustellen. Die Java-Syntax ist C++ fast ähnlich, bietet aber viel mehr Funktionen als C++.

Die Verfügbarkeit von objektorientierter Programmierung (OOP) hat Java zu seiner Zeit von allen anderen verbleibenden Sprachen abgehoben. Java wurde entwickelt, um OOP in seinem Kern zu verwenden, und es war einer der Gründe dafür, eine am häufigsten verwendete Sprache zu sein. Dieses Konzept erhöht die Wiederverwendbarkeit und nahtlose Ausführung. In diesem Moment stellt sich vielleicht die Frage „Warum sollten wir ein Objekt verwenden?“.

Objekte in Java ähneln Strukturen in der Programmiersprache c, wo wir ähnliche Methoden und Variablen miteinander verbinden. Daneben bietet Java auch Abstraktion, Kapselung, Vererbung und Polymorphismus, was den Benutzer dazu ermutigt, Objekte zu implementieren.

Java spielt eine dominierende Rolle in vielen Bereichen wie App-Entwicklung, Webentwicklung, Erstellung von Software-Tools. Es hat auch eine große Anzahl von Bibliotheken, die die Dinge einfacher machen. Auch die Verfügbarkeit von IDE spielt eine entscheidende Rolle, wenn es darum geht, die Aufmerksamkeit von Entwicklern zu gewinnen. IDEs wie Eclipse, IntelliJ, NetBeans werden häufig von vielen Entwicklern verwendet.

Gut, jetzt kommen wir zu unserer Diskussion.

Aber zuerst einmal, was bedeutet Plattformunabhängigkeit?. Um eine Antwort auf diese Frage zu erhalten, müssen wir wissen, was passiert, wenn wir einen Code kompilieren.

Kompilieren eines Codes

Wann immer wir einen Code schreiben, folgen wir den Syntaxen einer Programmiersprache, die ziemlich gut lesbar wäre. Und es enthält wenige Wörter, Phrasen, Variablennamen, Methodennamen usw. All diese Dinge werden als für Menschen lesbarer und für Menschen verständlicher Text betrachtet.

Eine Maschine verwendet also einen Compiler, um den Quellcode in einen maschinenlesbaren Code umzuwandeln, der auch als Maschinensprache bezeichnet wird. Der Compiler erstellt den Code auf Maschinenebene in einer bestimmten Präsentation, sodass er von der CPU leicht verstanden und daher nahtlos ausgeführt werden kann.

Dieser Aufbau einer Sprache auf Maschinenebene unterscheidet sich je nach Programmiersprache und Betriebssystem. Beispielsweise generiert c/c++ eine .exe-Datei, die für zwei Computer unterschiedlich ist, wenn sie auf einem anderen Betriebssystem ausgeführt werden.

Und hier entsteht das Problem!

Wenn sich eine Sprache auf Maschinenebene je nach Betriebssystem unterscheidet, können wir einen Code, der auf einer anderen Maschine kompiliert wurde, nicht auf einer neuen Maschine ausführen, es sei denn, beide Systeme arbeiten mit demselben Betriebssystem. Das fühlt sich für viele Programmierer und Entwickler wie Mist an.

Aber Java macht die Dinge einfacher, und Java hat eine Lösung dafür. Lass uns anfangen.

Java ist plattformunabhängig

Was passiert also, wenn wir Code in Java kompilieren?

Immer wenn wir eine Anweisung „javac filename.java“ eingeben oder einen Code in Java kompilieren, kompiliert javac den Code. Und es erstellt einen Zwischencode namens Byte Code.

Hier unterscheidet Java zwischen allen verschiedenen Programmiersprachen. Es erstellt eine .class-Datei, die als Bytecode betrachtet wird. Während Sprachen wie c/c++ beim Kompilieren einen nativ ausführbaren Code erstellen und sie somit plattformabhängig machen.

Moment mal, zum Feiern ist es noch zu früh. Dieser Bytecode ist nicht ausführbar. Wir brauchen einen Übersetzer, um diesen Bytecode auszuführen. Und JVM erledigt diese Aufgabe. Im Allgemeinen befindet sich JVM im Hauptspeicher unseres Computers. Java Virtual Machine fungiert als Interpreter und führt dann den von javac generierten Bytecode aus.

Und jetzt sind wir fertig, unser Code wird erfolgreich ausgeführt.

Wie also soll Java das alleine schaffen?

Und die Antwort wäre, es liegt an der JVM. Der durch die Quellcodekompilierung generierte Bytecode würde in jedem Betriebssystem ausgeführt, aber die in einer Maschine vorhandene JVM unterscheidet sich für jedes Betriebssystem. Und so gilt Java als plattformunabhängige Programmiersprache.

Um es richtig zu verstehen, lassen Sie uns die Architektur und Funktionsweise der JVM verstehen.

JVM-Architektur

JVM ist Teil der Java-Laufzeitumgebung und für die Konvertierung einer .java-Datei in eine .class-Datei verantwortlich. Wenn wir einen Java-Code kompilieren, ruft JVM die Hauptmethode im Quellcode auf.

JVM-Architektur

ClassLoader

Es ist ein Subsystem in der Java Virtual Machine. Es lädt die .class-Datei, prüft, ob Ausnahmen vorhanden sind, und ist der Grund für wenige Laufzeitausnahmen. Und nach der Überprüfung weist es den Speicher für die Variablen und die vorhandenen Methoden zu, weist Variablen und Arrays Standardwerte zu. Es führt auch die im Code vorhandenen statischen Methoden oder Variablen aus.

Es gibt 3 eingebaute Klassenlader in JVMm, Bootstrap-Klassenlader, Erweiterungs-Klassenlader, Anwendungs-Klassenlader.

Speicherbereiche in JVM

Methoden-/Klassenbereich

Es speichert Informationen wie Klassennamen, Methodennamen, Variablen. Es ist eine gemeinsam genutzte Ressource für alle Methoden und Variablen in einer Klasse.

Haufen

Es speichert die Informationen aller im Heap-Bereich gespeicherten Daten.

JVM-Sprachstack

Es speichert die Informationen in Blöcken, die auch Stack-Frames/Frames genannt werden, die die aktuellen Informationen speichern, wenn es einen Funktionsaufruf gibt, speichert lokale Variablen und spielt auch eine dominierende Rolle bei der Thread-Verwaltung.

PC-Registrierung

Es speichert die Adresse des gerade ausgeführten Befehls. Dies ist in einer Multi-Thread-Ausführungssituation nützlich.

Nativer Methodenstapel

Es speichert alle Informationen der verwendeten nativen Methoden.

Ausführungs-Engine

Die Ausführungsmaschine führt den Bytecode aus und entfernt den zugewiesenen Speicher für die Objekte, die nicht erreichbar oder nicht referenziert sind. Der Interpreter in der Ausführungsmaschine führt den Bytecode aus, indem er ihn in einem Strom liest und Zeile für Zeile interpretiert.

Es hat auch einen spannenden Teil namens JIT-Compiler (Just In Time Compiler), in dem es einen nativen ausführbaren Code für Methoden erstellt. Wenn also mehrere Funktionsaufrufe vorhanden sind, muss die JVM sie nicht erneut interpretieren, sondern direkt den nativen ausführbaren Code verwenden. Daher verbessert es die Leistung der Ausführung.

Schnittstelle für native Methoden

Diese Schnittstelle wird von Java für die Interaktion mit Anwendungen verwendet, die in verschiedenen Sprachen wie C/C++ implementiert sind. Die Interaktion ist bidirektional, wobei die JVM diese Anwendungen aufrufen kann oder von diesen Anwendungen aufgerufen werden kann.

Native Methodenbibliotheken

Es verfolgt die nativen Sprachbibliotheken, die von der Ausführungsmaschine verwendet werden können.

Nachdem wir nun die Architektur der JVM verstanden haben, kehren wir zu unserer Diskussion zurück. Diese JVM ist also für verschiedene Betriebssysteme unterschiedlich, aber die von diesen JVMs generierte Ausgabe ist für denselben bereitgestellten Bytecode dieselbe.

Lesen Sie auch: Ideen und Themen für Java-Projekte

Lernen Sie Softwareentwicklungskurse online von den besten Universitäten der Welt. Verdienen Sie Executive PG-Programme, Advanced Certificate-Programme oder Master-Programme, um Ihre Karriere zu beschleunigen.

Fazit

Wir haben einige einzigartige Funktionen von Java besprochen, verstanden, was passiert, wenn wir Code in Sprachen wie C/C++ kompilieren, haben den Unterschied zwischen nativ ausführbarem Code und Byte-Code verstanden. Wir haben erklärt, warum Java als plattformunabhängige Sprache betrachtet wird, und verstanden, dass JVM der Grund für die Plattformunabhängigkeit von Java ist. Zum besseren Verständnis haben wir uns die JVM-Architektur angesehen.

Jetzt, da Sie sich des Grundes bewusst sind, warum Java plattformunabhängig ist, erkunden Sie andere einzigartige Funktionen von Java und beginnen Sie, sie zu nutzen!

Wenn Sie mehr über Java und die Full-Stack-Softwareentwicklung erfahren möchten, schauen Sie sich das Executive PG-Programm in Full-Stack-Softwareentwicklung von upGrad & IIIT-B an, das für Berufstätige konzipiert ist und mehr als 500 Stunden strenges Training bietet, 9+ Projekte und Aufgaben, IIIT-B-Alumni-Status, praktische praktische Abschlussprojekte und Arbeitsunterstützung bei Top-Unternehmen.

Welche Vorteile hat Java gegenüber anderen Sprachen?

Es gibt viele Vorteile von Java gegenüber anderen Sprachen. Beginnen wir mit dem obersten Vorteil, Java ist plattformunabhängig. Java-Code kann auf jeder Hardwareplattform, jedem Betriebssystem und Browser ausgeführt werden. Es kann auf jedem Gerät ausgeführt werden. Das heißt, sobald Sie Ihre Anwendung in Java geschrieben haben, können Sie sie auf jedem Gerät ausführen. So einfach ist das! Sobald Sie Ihren Code geschrieben haben, ist es außerdem sehr einfach, Fehler zu debuggen und Fehler zu beheben. Schließlich ist Java objektorientiert. Dies bedeutet, dass Sie kleinere Programme und Code verwenden müssen. Dadurch wird es einfacher, mit Ihrem Code zu arbeiten. Wenn Änderungen erforderlich sind, ist der Code weniger fehleranfällig. Es verfügt über Funktionen wie Multithreading, Speicherverwaltung, Plattformunabhängigkeit, Sicherheit, virtuelle Maschine, dh Bytecode, Collection Framework, Garbage Collector, Layered Architecture usw.

Warum ist Java plattformunabhängig?

Java ist plattformunabhängig, da es eine virtuelle Maschine verwendet. Die Programmiersprache Java und alle APIs werden in Bytecodes kompiliert. Bytecodes sind praktisch plattformunabhängig. Die virtuelle Maschine kümmert sich um die Unterschiede zwischen den Bytecodes für die verschiedenen Plattformen. Die Laufzeitanforderungen für Java sind daher sehr gering. Die Java Virtual Machine kümmert sich um alle hardwarebezogenen Belange, sodass kein Code für unterschiedliche Hardware kompiliert werden muss.

Was ist automatische Garbage Collection in Java?

Die automatische Garbage Collection ist eine Garbage Collection-Technik, bei der der Garbage Collector automatisch ausgeführt wird, ohne dass der Programmierer Code dafür schreiben muss. In Java wird die Garbage Collection durchgeführt, indem die Java Virtual Machine in einen speziellen Modus versetzt wird. Der Garbage Collector wird ausgeführt, wenn er eine Gelegenheit dazu sieht. Einige Garbage Collectors verwenden einen Stop-the-World-Ansatz, und die Java Virtual Machine muss die Ausführung des Programms stoppen, um die Garbage Collection durchzuführen. Garbage Collection ist kein einfaches Konzept, aber wenn Sie es einmal verstanden haben, gibt es kein Zurück mehr. Und die Garbage Collection von Java ist eine der am einfachsten zu verstehenden.