Wie ist Java plattformunabhängig, wenn eine JVM zum Ausführen benötigt wird?


79

Ich habe gerade angefangen, Java zu lernen und bin verwirrt über das Thema Plattformunabhängigkeit.

Bedeutet "unabhängig" nicht, dass Java-Code auf jedem Computer ausgeführt werden sollte und keine spezielle Software installiert werden muss? Die JVM muss jedoch in der Maschine vorhanden sein.

Zum Beispiel benötigen wir den Turbo C Compiler, um C / C ++ - Quellcode zu kompilieren und dann auszuführen. Die Maschine muss den C-Compiler haben.

Könnte jemand bitte, was gemeint ist, wenn Java als "plattformunabhängig" beschrieben wird?


4
@aaa: Zuletzt habe ich überprüft, dass es auf der Borland-Website kostenlos heruntergeladen werden kann.
dan04

1
Ja, als Antique Software aufgeführt ... ( edn.embarcadero.com/article/20841 ).
Matthew Flaschen

2
Turbo C (oder ein anderer 'nativer' Compiler) wird nicht benötigt, um das kompilierte Programm auszuführen. Der Compiler generiert eine .exeDatei. Es erfordert höchstens eine Laufzeitbibliothek (in einer .dllDatei), nicht den gesamten Compiler
Javier

Antworten:


111

In der Regel ist der kompilierte Code genau der Befehlssatz, den die CPU benötigt, um das Programm "auszuführen". In Java ist der kompilierte Code ein exakter Befehlssatz für eine "virtuelle CPU", die auf jeder physischen Maschine gleich funktionieren muss.

In gewisser Weise entschieden die Designer der Java-Sprache, dass die Sprache und der kompilierte Code plattformunabhängig sein sollten. Da der Code jedoch letztendlich auf einer physischen Plattform ausgeführt werden muss, entschieden sie sich dafür, den gesamten plattformabhängigen Code einzufügen die JVM.

Diese Anforderung für eine JVM steht im Gegensatz zu Ihrem Turbo C-Beispiel. Mit Turbo C erzeugt der Compiler plattformabhängigen Code, und es ist keine JVM erforderlich, da das kompilierte Turbo C-Programm direkt von der CPU ausgeführt werden kann.

Mit Java führt die CPU die plattformabhängige JVM aus. Diese ausgeführte JVM führt dann den plattformunabhängigen Java-Bytecode aus, vorausgesetzt, Sie verfügen über eine JVM, auf der sie ausgeführt werden kann. Sie könnten sagen, dass Sie beim Schreiben von Java-Code nicht programmieren, dass der Code auf der physischen Maschine ausgeführt wird, sondern den Code, der auf der Java Virtual Machine ausgeführt werden soll.

Der einzige Weg, wie all dieser Java-Bytecode auf allen virtuellen Java-Maschinen funktioniert, besteht darin, dass ein ziemlich strenger Standard für die Funktionsweise von virtuellen Java-Maschinen geschrieben wurde. Dies bedeutet, dass unabhängig davon, welche physische Plattform Sie verwenden, der Teil, in dem der Java-Bytecode mit der JVM verbunden ist, garantiert nur in eine Richtung funktioniert. Da alle JVMs genau gleich funktionieren, funktioniert derselbe Code überall genau gleich, ohne neu kompiliert zu werden. Wenn Sie die Tests nicht bestehen können, um sicherzustellen, dass sie identisch sind, dürfen Sie Ihre virtuelle Maschine nicht als "Java Virtual Machine" bezeichnen.

Natürlich gibt es Möglichkeiten, die Portabilität eines Java-Programms zu beeinträchtigen. Sie könnten ein Programm schreiben, das nach Dateien sucht, die nur auf einem Betriebssystem gefunden werden (z. B. cmd.exe). Sie können JNI verwenden, mit dem Sie kompilierten C- oder C ++ - Code effektiv in eine Klasse einfügen können. Sie können Konventionen verwenden, die nur für ein bestimmtes Betriebssystem funktionieren (z. B. die Annahme, dass ":" Verzeichnisse trennt). Sie müssen Ihr Programm jedoch garantiert nie für einen anderen Computer neu kompilieren, es sei denn, Sie tun etwas ganz Besonderes (wie JNI).


1
"Da alle JVMs genau gleich funktionieren, funktioniert derselbe Code überall genau gleich, ohne dass er neu kompiliert wird." Was bedeutet dieser Satz? Wenn Sie dasselbe Programm auf verschiedenen Systemen ausführen, auf denen JVM installiert ist, führen wir immer "javac filename.java" aus. (Nehmen Sie zum Beispiel ein einfaches Programm.) Wenn das Programm nicht erneut kompiliert werden muss, warum wird dann gesagt, dass "wir denselben Code überall ausführen könnten, ohne ihn neu zu kompilieren?". Bitte erkläre.
Karan Thakkar

3
Sie müssen Java-Quellcode kompilieren, daher "javac filename.java". Sie müssen jedoch nur einmal und nicht auf jedem Computer, auf dem er verwendet wird (dies unterscheidet sich von C und C ++). Wenn Sie CPUs, 32/64-Bit-Systeme, Bytereihenfolgen usw. ändern, wird der Code weiterhin ausgeführt. Dies liegt daran, dass die Ausgabe "filename.class" Bytecode enthält, der Anweisungen an die JVM sind. Da alle JVMs funktional identisch sind, können Sie diesen Bytecode nach dem Kompilieren des Codes auf jeder Java Virtual Machine ausführen, ohne über den Quellcode zu verfügen. Probieren Sie es aus, es funktioniert. Außerdem verwechseln einige Kommentare das Kompilieren mit dem Neukompilieren.
Edwin Buck

@KaranThakkar - Ich denke, eine Erweiterung dessen, was Edwin sagen wollte, könnte sein, dass Sie problemlos dieselben .jar-Dateien in Ihren Projekten auf jeder Plattform verwenden können, ohne sie zu kompilieren.
vanguard69

54
            Technical Article on How java is platform indepedent?

Bevor Sie ins Detail gehen, müssen Sie zunächst verstehen, was Plattform bedeutet. Die Plattform besteht aus der Computerhardware (hauptsächlich Architektur des Mikroprozessors) und dem Betriebssystem. Plattform = Hardware + Betriebssystem

Alles, was plattformunabhängig ist, kann auf jedem Betriebssystem und jeder Hardware ausgeführt werden.

Java ist plattformunabhängig, sodass Java auf jedem Betriebssystem und jeder Hardware ausgeführt werden kann. Die Frage ist nun, wie es plattformunabhängig ist.

Dies liegt an der Magie des Byte-Codes, der vom Betriebssystem unabhängig ist. Wenn der Java-Compiler Code kompiliert, generiert er den Bytecode und nicht den nativen Code der Maschine (im Gegensatz zum C-Compiler). Dieser Bytecode benötigt nun einen Interpreter, um auf einem Computer ausgeführt zu werden. Dieser Interpreter ist JVM. JVM liest also diesen Bytecode (der maschinenunabhängig ist) und führt ihn aus. Unterschiedliche JVM wurden für unterschiedliche Betriebssysteme entwickelt und Bytecode kann auf unterschiedlichen Betriebssystemen ausgeführt werden.

Im Falle von C oder C ++ (Sprache, die nicht plattformunabhängig ist) generiert der Compiler die EXE-Datei, die vom Betriebssystem abhängig ist. Wenn wir diese EXE-Datei auf einem anderen Betriebssystem ausführen, wird sie nicht ausgeführt, da diese Datei vom Betriebssystem abhängig ist und daher nicht kompatibel ist das andere Betriebssystem.

Schließlich macht ein vom Betriebssystem unabhängiger Byte-Code die Java-Plattform unabhängig.


5
Das ist eine dumme Antwort. Was die Java-Plattform unabhängig macht, ist die Tatsache, dass Java VM-abhängig ist. Es ist egal, auf welchem ​​Betriebssystem es ausgeführt wird, solange diese VM die Aufrufe von Betriebssystemvorgängen erfüllt. Und VM selbst ist nicht plattformunabhängig. Der Vergleich, den Sie mit der C / C ++ - Sprache durchgeführt haben, war falsch. Kompilieren Sie einfach den Quellcode auf genau dieser Plattform, und er wird ausgeführt. Warum sollten Sie diese Anweisungen auf eine andere Plattform übertragen und dummerweise damit rechnen, dass sie ausgeführt werden? Können Sie Ihren Java-Quellcode zu ARM bringen und erwarten, dass er auf einer VM ausgeführt wird, die für meinen custom_processor kompiliert wurde?
Abhinav Gauniyal

Das Design für eine JVM ist das gleiche. Oracle wird verrückt werden, wenn es darum geht, für jede Maschine unterschiedliche JVMs zu entwickeln. Der einzige Unterschied ist der Bytecode des Programms, das Sie auf einem Computer ausführen möchten. Jedes Programm generiert einen anderen Bytecode-Typ. Die Bytecode-Datei hat ein hexadezimales Format, damit die JVM und die CPU den Befehlssatz verstehen und ausführen können.
Karan Thakkar

26

Dies bedeutet, dass der Java-Programmierer (theoretisch) keine Maschinen- oder Betriebssystemdetails kennen muss. Diese Details sind vorhanden und werden von der JVM und den Klassenbibliotheken verarbeitet. Im Gegensatz zu C können Java-Binärdateien (Bytecode) häufig auf völlig andere Systeme verschoben werden, ohne sie zu ändern oder neu zu kompilieren.


10
"... Java-Binärdateien (Bytecode) können häufig ohne Neukompilierung auf völlig andere Architekturen verschoben werden." Eigentlich können sie immer . Eine Neukompilierung ist nur erforderlich, wenn für eine neuere JVM kompilierter Code in eine ältere verschoben wird.
Stephen C

@ Stephen, ich habe es in "Systeme" geändert. Es gibt viele Faktoren, die die Portabilität beeinträchtigen können, einschließlich der Verwendung von JNA oder JNI zum Verknüpfen mit Bibliotheken, die nur für eine einzelne Architektur geschrieben wurden.
Matthew Flaschen

1
JNA oder JNI scheinen mir der einzige Faktor zu sein, und diese sind in der Praxis ziemlich selten. Selbst dann kann der Bytecode immer noch verschoben werden, ohne dass er neu kompiliert werden muss. Möglicherweise müssen Sie nur die Bibliotheken neu kompilieren, die das JNI erwartet. Der Bytecode ist jedoch immer noch portabel.
Kendall Helmstetter Gelner

vereinbart ... aber in keinem dieser Fälle wird das Neukompilieren der "Java-Binärdateien (Bytecode)" den geringsten Unterschied machen !!
Stephen C

Ich habe eine Frage: Interagiert der konforme Java-Bytecode mit dem Betriebssystemkernel? Wenn ja, kann der gleiche Bytecode nicht auf verschiedene Kernel angewendet werden, da die Kernelfunktionen unterschiedlich sind, oder? Oder die JVM enthält alle Kernelfunktionen für jeden Kernel, was sehr unglaublich ist ...
henryyao

9

Nein, es ist umgekehrt. Weil Sie die virtuelle Maschine verwenden, wird das Java-Programm unabhängig.

Die virtuelle Maschine ist nicht unabhängig. Sie müssen eine installieren, die speziell für Ihren Systemtyp entwickelt wurde. Die virtuelle Maschine erstellt eine unabhängige Plattform über dem Betriebssystem.


8

Die JVM ist eine "simulierte Maschine", die auf verschiedenen Systemen installiert werden kann. Auf diese Weise kann derselbe Java-Code auf verschiedenen Systemen ausgeführt werden, da er auf der JVM und nicht auf dem Betriebssystem selbst basiert.

Das heißt, dies ermöglicht es dem Programmierer, mit dem virtuellen System (JVM) zu kommunizieren und dessen Funktionen anstelle der spezifischen Maschinen- und Betriebssystemfunktionen zu nutzen. Da Java nur auf JVM basiert, ist es plattformunabhängig (wenn auf der Plattform JVM installiert ist).

Kurz gesagt, Java ist als solches nicht plattformunabhängig, sondern erfordert eine JVM-Installation für alle Systeme, auf denen es ausgeführt werden soll. Es kann jedoch auf allen Systemen ausgeführt werden, auf denen die JVM installiert ist.


4

Java ist plattformunabhängig, da es über JVM (Java Virtual Machine) verfügt. Lassen Sie es uns anhand eines Beispiels aus dem wirklichen Leben veranschaulichen. Nehmen wir an, Sie sind für Ihre Familienmitglieder frei. Aber wieso?

Weil du sie gut kennst und sie dich auch kennen. Aber Sie sind nicht frei für meine Familienmitglieder. Weil du sie nicht kennst und sie dich auch nicht kennen. Aber wenn ich dein Freund bin und dich meinen Familienmitgliedern vorstellen kann, kannst du frei mit ihnen sprechen.

In ähnlicher Weise, wenn Sie ein Code sind und ich eine JVM bin. Außerdem ist Ihre Familie die Windows-Plattform und meine die Linux-Plattform. Wenn Sie ein C oder eine andere plattformabhängige Sprache waren, kennen Sie nur Ihre Familienmitglieder und umgekehrt. Deshalb kennt nur die Plattform, auf der Sie geschrieben wurden, diesen Code und wird ihn unterstützen. Aber wenn Sie ein JAVA-Code sind und wenn Sie zu meiner Familie kommen, nämlich. die Linux-Plattform und wenn Sie mich dort finden, JVM, dann kann ich Sie meiner Familie vorstellen, der Linux-Plattform, und Sie werden in der Lage sein, mit ihr zu interagieren.

Für plattformabhängige Sprachen steht ihnen kein Freund wie JVM zur Verfügung, um sich einer Plattformfamilie vorzustellen. So ist Java plattformunabhängig. :) :)


3

Die JVM abstrahiert von der konkreten Plattform. Ihr Programm basiert nur auf der JVM. Da die JVM für verschiedene Plattformen wie Windows und Linux verfügbar ist, ist Ihr Programm plattformunabhängig (aber von JVM abhängig).


3

In c / c ++ wird der Quellcode (c-Programmdatei) nach der Kompilierung mit einem Compiler direkt in nativen Maschinencode konvertiert (was für einen bestimmten Computer verständlich ist, auf dem Sie den Code kompilieren). Daher kann der kompilierte Code von c / c ++ nicht auf einem anderen Betriebssystem ausgeführt werden.

Aber im Fall von Java: Die Quelldatei von Java (.java) wird mit dem JAVAC-Compiler (in JDK vorhanden) kompiliert, der den Bytecode (.class-Datei) bereitstellt, der für jede auf einem Betriebssystem installierte JVM (Physical System) verständlich ist. .

Hier benötigen wir unterschiedliche JVM (die plattformabhängig ist) für verschiedene Betriebssysteme, auf denen wir den Code ausführen möchten, aber die .class-Datei (kompilierter Code / Zwischencode) bleibt gleich, da sie für jede installierte JVM verständlich ist auf jedem Betriebssystem.

In c / c ++: Nur der Quellcode ist maschinenunabhängig. In Java: Sowohl der Quellcode als auch der kompilierte Code sind plattformunabhängig.

Dies macht Java Platform (Maschine) unabhängig.


3

Java ist nicht plattformunabhängig, selbst ist eine Plattform, die auf dieser Plattform basiert. Java-Apps werden ausgeführt, aber die Java-Plattform selbst ist plattformabhängig


2

1:jvm(dh Java Virtual Machine) ist eine Sammlung von Programmen, die viele Dateien enthält, die verschiedene Funktionsdateien bereitstellen, die in einem Ordner (dh Sammlungen von Programmen im mittleren Format) wie aufgerufen vorhanden sind packages. jvmEs hilft, nicht überladen zu werden, o/swenn es hilft, nur die .classDateien oder Java-Anwendungen nur für sich selbst auszuführen. Es hilft, das Gleichheitsformat nach der Kompatibilität durch den Java-Compiler auf ein mittleres Format zu bringen und dann die Darstellung des Bytecodes (.class-Datei) bereitzustellen ist nicht spezifisch für o/sund processor.
2: jvm macht den Bytecode zur .exeDatei, damit der Prozessor ihn verständlich macht, und zeigt die Speicherzuordnung für alle Funktionen an, nachdem der frm-Bytecode empfangen wurde.
3: jvm gibt auch die Speicherzuordnung vom RAM frei, nachdem die Steuerung ihre Ausführung abgeschlossen hat.


2

JVM ist os-abhängig. für jedes os JVM anders.

".class" ist für alle JVMs gleich. Daher versteht jede JVM diese ".class" -Dateidaten.

Windows-abhängige JVM geben Windows-abhängige Anweisungen an Windows Linux-abhängige JVM geben Linux-abhängige Anweisungen an Linux.

das ist wie bei anderen Betriebssystemen. Java läuft also auf jedem Betriebssystem.

Deshalb ist Java unabhängig.


2

In einfachen Worten:

Die Programmiersprache Java ist plattformunabhängig.

JVM ist plattformabhängig


1

Java ist nicht plattformunabhängig, da es auf der JVM ausgeführt wird. Sie erhalten jedoch Plattformunabhängigkeit durch Programmierung auf einem einzelnen abstrakten Computer, der auf den meisten gängigen Betriebssystemplattformen (und einigen eingebetteten Appliances) konkrete Erkenntnisse aufweist.

Eine verwandte Idee ist die in vielen Betriebssystemen vorhandene Hardwareabstraktionsschicht, mit der dasselbe Betriebssystem auf unterschiedlicher Hardware ausgeführt werden kann.

In Ihrer ursprünglichen Frage entspricht Turbo C dem Javac-Programm, und die JVM ist das OS / HAL.


1

Bedeutet nicht unabhängig, dass Java-Code auf jedem Computer ausgeführt werden kann und keine spezielle Software installiert werden muss (in diesem Fall muss JVM auf dem Computer vorhanden sein)?

Mit Java können Sie Quellcode unter Windows kompilieren und der kompilierte Code (genauer gesagt Bytecode) kann auf jeder Plattform ausgeführt (interpretiert) werden, auf der eine JVM ausgeführt wird. Ja, Sie benötigen eine JVM, aber die JVM kann jeden kompilierten Code ausführen. Der kompilierte Code ist plattformunabhängig .

Mit anderen Worten, Sie haben sowohl die Portabilität des Quellcodes als auch die Portabilität des kompilierten Codes.

Wie zum Beispiel benötigen wir Turbo C Compiler, um C / C ++ - Quellcode zu kompilieren und dann auszuführen. Die Maschine muss über den C-Compiler verfügen.

Die Maschine muss keinen C-Compiler haben, die Maschine muss eine plattformspezifische Binärdatei verwenden. Mit C oder C ++ ist der kompilierte Code für jede Architektur spezifisch und plattformunabhängig .

Mit anderen Worten, mit C / C ++ haben Sie die Portabilität des Quellcodes (mit etwas Disziplin), aber nicht die Portabilität des kompilierten Codes: Sie müssen für jede Architektur in plattformspezifische Binärdateien neu kompilieren.


1

JVM wird plattformabhängig sein.
Aber was auch immer es erzeugen wird, es wird plattformunabhängig sein. [was wir als Bytecode oder einfach als Klassendatei bezeichnet haben]. Aus diesem Grund wird Java als plattformunabhängig bezeichnet.
Sie können dieselbe Klassendatei auch auf einem Mac unter Windows ausführen, es ist jedoch JRE erforderlich.


0

Bytecode ist nicht plattenformunabhängig, sondern seine JVM, die Bytecode unabhängig macht. Bytecode ist nicht der Matchine-Code. Bytecodes sind kompakte numerische Codes, Konstanten und Referenzen (normalerweise numerische Adressen), die das Ergebnis der Analyse und semantischen Analyse von Dingen wie Typ, Umfang und Verschachtelungstiefe von Programmobjekten codieren. Sie ermöglichen daher eine viel bessere Leistung als die direkte Interpretation des Quellcodes. Der Bytecode muss vor der Ausführung interpretiert werden, was immer vom JVM-Interpreter durchgeführt wird.


0

Nur eine Randnotiz zur Diskussion über JVM und JIT Compilation. Dies ist das gleiche Prinzip wie bei C # und der CLR und zu einem gewissen Grad in Python. Wenn jemand sagt, dass der Code "direkt auf Hardware" ausgeführt wird, was tatsächlich in den bereits kompilierten Anweisungen zutrifft, kann er die Optimierung nutzen Auf der Maschine / CPU wird es ausgeführt. Selbst wenn die anfängliche Kompilierung eines Moduls ziemlich langsam ist, wird der ausgeführte Code beim nächsten Ausführen dieses Moduls mit nativer Geschwindigkeit ausgeführt und somit sozusagen direkt auf der Hardware ausgeführt.


0

Java ist in Bezug auf Java-Entwickler plattformunabhängig. Dies gilt jedoch nicht für Endbenutzer, die eine plattformabhängige JVM benötigen, um Java-Code ausführen zu können. Grundsätzlich wird beim Kompilieren von Java-Code ein Bytecode generiert, der normalerweise plattformunabhängig ist. Daher muss der Entwickler einen einzelnen Code für die gesamte Plattformserie schreiben. Dieser Vorteil bringt jedoch Kopfschmerzen für Endbenutzer mit sich, die JVM installieren müssen, um diesen kompilierten Code auszuführen. Diese JVM ist für jede Plattform unterschiedlich. Somit wird die Abhängigkeit nur für den Endbenutzer wirksam.


0

Javac - Compiler, der Quellcode in Bytecode konvertiert. JVM - Interpreter, der Bytecode in Maschinensprachencode konvertiert.

Wie wir wissen, ist Java eine kompilierte ** r & ** Interpreter- basierte Sprache. Sobald der Java-Code, auch als Quellcode bekannt, kompiliert wurde, wird er in nativen Code namens BYTE CODE konvertiert, der portabel ist und problemlos auf allen Betriebssystemen ausgeführt werden kann. Der generierte Bytecode wird grundsätzlich im Hexa-Dezimalformat dargestellt . Dieses Format ist auf jeder Plattform gleich, sei es Solaris Workstation oder Macintosh, Windows oder Linux. Nach der Kompilierung liest der Interpreter den generierten Bytecode und übersetzt ihn entsprechend dem Hostcomputer. . Bytecode wird von Java Virtual Machine interpretiert, die mit allen von uns installierten Betriebssystemen verfügbar ist. Um Java-Programme auf eine neue Plattform zu portieren, müssen lediglich der Interpreter und einige der Bibliotheksroutinen portiert werden.

Ich hoffe es hilft!!!


0

Wenn wir C-Quelldaten kompilieren, wird nativer Code generiert, der vom aktuellen Betriebssystem verstanden werden kann. Wenn wir diesen Quellcode auf das andere Betriebssystem verschieben, kann er vom Betriebssystem aufgrund des nativen Codes nicht verstanden werden. Dies bedeutet, dass die Darstellung von Betriebssystem zu Betriebssystem geändert wird. Daher sind C oder C ++ plattformabhängig.

Im Falle von Java erhalten wir nach der Kompilierung Bytecode anstelle von nativem Code. Wenn wir den Bytecode ausführen, wird er mit Hilfe von JVM in nativen Code konvertiert und dann ausgeführt.

Java ist also plattformunabhängig und C oder C ++ ist nicht plattformunabhängig.


0

Gute Frage, aber wenn der Quellcode von einem Compiler in nativen Zwischenbytecode geändert wird, in dem er das Programm in den Bytecode konvertiert, indem er die Fehler nach der gesamten Überprüfung auf einmal angibt (falls gefunden), und das Programm dann einen Interpreter benötigt, der würde das Programm Zeile für Zeile überprüfen und es direkt in Maschinencode oder Objektcode ändern, und jedes Betriebssystem kann aus Sicherheitsgründen standardmäßig keinen Java-Interpreter haben, sodass Sie um jeden Preis jvm benötigen, um es auf dieser anderen Betriebssystemplattform auszuführen Unabhängigkeit, wie Sie hier sagten, bedeutet, dass das Programm unter jedem Betriebssystem wie Unix, Mac, Linux, Windows usw. ausgeführt werden kann. Dies bedeutet jedoch nicht, dass jedes Betriebssystem die Codes ohne ein JVM ausführen kann, das Spezifikation, Implementierung, und Instanz,Wenn ich voranschreite, indem ich die Konfiguration Ihres PCs so ändere, dass Sie einen Klassenlader haben, der sogar den Bytecode öffnen kann, können Sie auch Java-Bytecode, Applets usw. ausführen - von nimish :) Viel Glück


0

{App1 (Java-Code) ------> App1byteCode} ........ {(JVM + MacOS) Hilfe bei der Arbeit mit App1, App2, App3}

{App2 (Java Code) -----> App2byteCode} ........ {(JVM + LinuxOS) Hilfe bei der Arbeit mit App1, App2, App3}

{App3 (Java Code) -----> App3byteCode} ........ {(JVM + WindowsOS) Hilfe bei der Arbeit mit App1, App2, App3}

Wie passiert das?

ByteCodeAntwort : JVM kann gemäß dem zugrunde liegenden Betriebssystem lesen und reagieren, da die JVM mit dem Betriebssystem synchronisiert ist.

Wir brauchen also JVM mit Sync with Platform.

Die Hauptsache ist jedoch, dass der Programmierer keine spezifischen Kenntnisse der Plattform kennen und seine Anwendung unter Berücksichtigung einer bestimmten Plattform programmieren muss.

Diese Flexibilität des Schreibprogramms in Java --- Kompilieren ByteCodeund Ausführen auf jedem Computer (Ja, für die Ausführung muss Platform DEPENDENT JVM erforderlich sein) macht Java Platform Independent.


-1

Wenn wir eine Java-Datei kompilieren, wird die .class-Datei dieses Programms generiert. Diese .class-Datei enthält den Bytecode. Dieser Bytecode ist plattformunabhängig. Der Bytecode kann auf jedem Betriebssystem mit einer virtuellen Java-Maschine ausgeführt werden. Plattformunabhängigkeit betrifft nicht nur das Betriebssystem, sondern auch die Hardware. Wenn Sie Ihre Java-Anwendung auf einem 16-Bit-Computer ausführen, den Sie auf einem 32-Bit-Computer erstellt haben, müssen Sie sich nicht um die Konvertierung der Datentypen gemäß dem Zielsystem kümmern. Sie können Ihre App auf jeder Architektur ausführen und erhalten in jeder Architektur das gleiche Ergebnis.


-3

Edit: Nicht ganz. Siehe Kommentare unten.

Java läuft auf nichts direkt. Es muss von einer JVM in Bytecode konvertiert werden.

Da JVMs für alle wichtigen Plattformen vorhanden sind, ist Java durch die JVM plattformunabhängig.


1
Die JVM interpretiert oder JITs Bytecode. Es wird nicht kompiliert.
Matthew Flaschen

Ja. "für die JVM" ist genauer.
Polygenelubricants

1
jopdesign.com ~ könnte das noch einmal versuchen. Diese Leute sagen, dass es direkt auf Hardware laufen kann.
Jcolebrand
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.