(Zunächst sollte ich klarstellen, dass Compiler und virtuelle Maschinen (auch bekannt als ) für mich ein völlig unbekanntes Feld sind.)
So wie ich es verstehe, wird jedes Mal, wenn eine Java / C # / ... -Anwendung ausgeführt wird, eine VM aufgerufen und Zwischencode (Bytecode, CIL usw.) in Maschinenanweisungen übersetzt.
Aber warum kann dieser Vorgang nicht nur einmal ausgeführt werden - zur Installationszeit?
Antworten:
Im Fall von Java kann die JVM Optimierungen durchführen, die Bibliotheksgrenzen überschreiten. Sie können beispielsweise eine Methode aus einer Bibliothek in Ihren eigenen Clientcode einbinden. Diese Art der Optimierung konnte zur Kompilierungszeit nicht durchgeführt werden, da sich die Bibliothek vor der Ausführung möglicherweise ändert. Es ist durchaus möglich, dass Ihr libfoo-1.0 ohne Neukompilierung durch libfoo-1.1 ersetzt wird. In diesem Fall werden bibliotheksübergreifende Inlines, die zur Kompilierungszeit erstellt wurden, vollständig ungültig.
Wenn Sie die Optimierung ausschließlich zur Laufzeit durchführen, besteht keine Sorge, dass die unter Ihnen geänderte Bibliothek die Optimierungen ungültig macht.
quelle
Weil dies verhindert, dass sie viele Funktionen nutzen. Wie kann die JIT beispielsweise neue generische Instanziierungen aus zur Laufzeit geladenen DLLs generieren? Diese DLLs sind zur Installationszeit nicht vorhanden.
quelle
Dies kann und ist zumindest bei .NET-Anwendungen häufig der Fall. Siehe Native Image Generator
quelle
Um die Frage gemäß der Klarstellung neu zu formulieren:
Ich sehe folgende Probleme:
Wo würden die Ergebnisse gespeichert? Sie können nicht davon ausgehen, dass die Datei mit dem Bytecode beschreibbar ist. Sie möchten den Computer eines Entwicklers nicht aufblähen, indem Sie jedes Mal, wenn er einen Test ausführt, eine neue EXE-Datei in den permanenten Speicher verschieben. Wenn Sie die Datei im temporären Speicher speichern, geht sie beim nächsten Neustart verloren, sodass Sie nicht viel gewonnen haben.
Sie tauschen jedes Mal einen etwas langsamen Start gegen einen sehr langsamen Start aus. Ich werde beim Kunden keinen guten Eindruck hinterlassen.
Sie werden erhebliche Probleme mit dem dynamischen Laden von Klassen haben.
quelle