Zunächst ist anzumerken, dass Suns JVM in C geschrieben wurde. C ist eine sehr beliebte Sprache, wenn Portabilität erforderlich ist.
Die C- Sprache ist portabel, obwohl dies bei vielen C- Programmen nicht der Fall ist. Dies liegt daran, dass C dem Programmierer nicht so viele Einschränkungen auferlegt oder so viele Annahmen trifft. Wenn ein C-Programmierer möchte, dass seine Programme portabel sind, muss er sich diese Einschränkungen auferlegen.
In der Praxis ist das wirklich nicht viel schwieriger, als mit den Einschränkungen zu leben, die Java Ihnen auferlegt. Es geht hauptsächlich darum, Ihre Endianness und primitiven Größen zu berücksichtigen und tragbare Bibliotheken wie GTK + anstelle plattformspezifischer Bibliotheken zu verwenden.
Sie könnten ein GTK + -Ziel und einen C-Compiler erstellen, die eine virtuelle Maschine unterstützen, wahrscheinlich sogar die JVM, und vorhandenen Code mit sehr wenigen Änderungen zum Laufen bringen. In der Tat wäre eine virtuelle C-Maschine ohne die Garbage Collection wahrscheinlich viel einfacher. Warum willst du das aber?
Das Umgekehrte, Java in nativen Code zu kompilieren, ist ebenfalls möglich. Genau das macht die JIT. Warum willst du das aber? Ich bin mir sicher, dass es Haustierprojekte gibt, die dies "nur weil" tun, aber sie werden nicht ernsthaft verwendet.