Zwischencode durch virtuelle Maschinen

471
pjj

Ich las über den Unterrichtssatz und bin auf folgende Zeile von WIKI gestoßen

Einige virtuelle Maschinen, die Bytecode als ISA unterstützen, wie Smalltalk, die Java Virtual Machine und die Common Language Runtime von Microsoft, implementieren dies, indem sie den Bytecode für häufig verwendete Codepfade in systemeigenen Maschinencode übersetzen.

Bitte korrigieren Sie mich zu meinem allgemeinen Verständnis in Bezug auf "Anweisungssatz" und den Umgang mit virtuellen Maschinen desselben:

  • Grundsätzlich haben Prozessoren Anweisungen oder Befehlssätze, die in ihren Speicher geladen werden und zur Verarbeitung verwendet werden. Jetzt empfangen Prozessoren Binäreingaben, die nichts anderes als die „binäre“ Darstellung dieser Befehlssätze sind. Recht?
  • Befehlssatz kann auch als "Maschinencode" oder "Maschinensprache" aufgerufen werden. Recht?
  • JVM akzeptiert Java-Bytecode und erstellt die binäre Form von Befehlssatz oder Maschinencode oder Maschinensprache. Auf diese Weise kann ich sagen, dass Bytecode die Maschinensprache der JVM ist, weil JVM den Bytecode versteht oder Bytecode als Eingabe verwendet und eine binäre Form von "Maschinencode" für das Betriebssystem erzeugt. Anschließend konvertiert das Betriebssystem diese "Maschinencode". in "Maschinencode" für den Prozessor . Recht?
    • Der fettgedruckte Teil meiner obigen Frage gehört zu den wichtigsten Dingen, die ich verstehen möchte. Da es keine JVMs für bestimmte Prozessoren gibt, gibt es JVMs für bestimmte Betriebssysteme. Ich verstehe daher, dass JVM keinen "Maschinencode" für den Prozessor erstellen kann und den "Maschinencode" für das Betriebssystem und schließlich das Betriebssystem produzieren wird der "Maschinencode", der vom Prozessor ausgeführt werden soll.

Bitte bestätigen Sie mein Verständnis und wenn es falsch ist, geben Sie bitte Details und / oder Hinweise darauf, warum es falsch ist und was das korrigierte Konzept ist.

0
Sie sagen, es gibt keine JVM für bestimmte Prozessoren, aber ich sehe 32-Bit-, 64-Bit- und SPARC-JVMs auf der Downloadseite: https://www.java.com/de/download/manual.jsp user2313067 vor 7 Jahren 0
@ user2313067 Ich bin mit deinem Kommentar überrascht, denn Bitness und Prozessor sind verschiedene Dinge. Ich weiß, dass es unterschiedliche JVMs für 32 und 64 Bit gibt. Wenn Sie mir beweisen können, dass es unterschiedliche JVMs für Prozessoren von Intel, AMD, Motorola, Qualcomm usw. gibt, dann akzeptiere ich demütig, dass meine Aussagen in meiner Frage falsch waren. pjj vor 7 Jahren 0
AMD und Intel stellen jedoch hauptsächlich x86- (32 Bit) und x86_64 (64 Bit) Prozessoren her. Diese verwenden denselben [Befehlssatz] (https://en.m.wikipedia.org/wiki/Instruction_set), damit sie denselben Maschinencode verarbeiten. Ich denke, Qualcomm stellt hauptsächlich Armprozessoren her, also würden Sie eine Arm-JVM benötigen, aber ich bin mir nicht sicher. user2313067 vor 7 Jahren 0
Bei allem Respekt, Sir, es sieht so aus, als hätten Sie kein Wissen über Java. Sie sagten: "Sie brauchen eine Arm-JVM", das ist überhaupt nicht richtig, denn damit dies wahr ist, ist das Wichtigste Die Java-Funktion muss defekt sein, dh Java ist architekturneutral und portabel **. pjj vor 7 Jahren 0
Nun, der Java-Bytecode bleibt architekturneutral und portabel. Sie benötigen nur eine JVM für die aktuelle Architektur. x86 und x86_64 sind unterschiedliche Architekturen und SPARC ist völlig unterschiedlich. Sie haben jedoch eine JVM für SPARC Solaris und eine für x86_64 Solaris. Der Punkt von Java ist, dass der generierte Bytecode unabhängig von dem System ist, auf dem er ausgeführt wird. Sie benötigen noch eine JVM für das Betriebssystem und die Architektur, auf der sie ausgeführt wird. user2313067 vor 7 Jahren 0
@ user2313067 Ich kann zu dem, was Sie oben gesagt haben, einverstanden sein, mit Ausnahme von "*** Yet **, Sie haben eine JVM für SPARC Solaris und eine für x86_64 Solaris.", "aber Ihre anderen Kommentare waren völlig falsch Kommentare helfen bei der Beantwortung meiner Fragen. Ich bin etwas überrascht, dass Sie sich auch ohne Java-Kenntnisse entschieden haben, meine Frage zu stimmen. pjj vor 7 Jahren 0
Ich bin nicht der Downvoter, und ich weiß nicht wirklich, warum die Leute es abgestiegen haben. Tatsächlich habe ich es nur zugesagt, da es meiner Meinung nach ziemlich klar ist. Ich bin ein bisschen unklar, ob es sich um ein Thema handelt oder nicht. Wenn ich meine Kommentare noch einmal lese, denke ich, ich hätte JRE anstelle von JVM schreiben sollen, aber mein Punkt ist, dass Sie direkt vom Java-Bytecode zum Prozessor-Maschinencode wechseln. Es gibt keinen OS-Maschinencode. user2313067 vor 7 Jahren 0
@ user2313067 Oh, bitte akzeptieren Sie meine aufrichtigen Entschuldigungen, da ich an Sie als niedergeschlagene Wählerin dachte. In der Java-Technologie ist JRE nichts anderes als JVM. Wenn Sie also JRE oder JVM sagen, ist es dasselbe. pjj vor 7 Jahren 0
Nun, die JVM ist der abstrakte Computer. Die JRE enthält eine * Implementierung * der JVM, die für Ihr Betriebssystem und Ihren Befehlsstatus spezifisch ist. Siehe die [Wikipedia-Seite] (https://en.m.wikipedia.org/wiki/Java_virtual_machine) user2313067 vor 7 Jahren 0

0 Antworten auf die Frage