Généralement, le code compilé est exactement le jeu d'instructions du PROCESSEUR nécessite d'exécuter le programme. En Java, le code compilé est un ensemble précis d'instructions pour un "PROCESSEUR virtuel" qui est nécessaire pour travailler de la même sur chaque machine physique.
Donc, dans un sens, les concepteurs du langage Java a décidé que la langue et le code compilé allait être indépendant de la plateforme, mais étant donné que le code a, finalement, à exécuter sur une plate-forme physique, ils ont choisi de mettre tous les dépendants de la plateforme de code dans la JVM.
Cette exigence d'une JVM est en contraste à votre Turbo C exemple. Avec Turbo C, le compilateur produira dépendants de la plateforme de code, et il n'est pas nécessaire pour une JVM travail-aussi bien que la compilation des Turbo C programme peut être exécuté par le PROCESSEUR directement.
Avec Java, le PROCESSEUR exécute la JVM, qui est dépendant de la plate-forme. Ce fonctionnement de la JVM puis exécute le bytecode Java qui est indépendant de la plateforme, à condition que vous ayez une JVM disponible pour exécuter sur. Vous pourriez dire que l'écriture de code Java, vous n'avez pas de programme pour l'exécution du code sur la machine physique, vous écrivez le code destiné à être exécuté sur une Machine Virtuelle Java.
La seule façon que tout ce bytecode Java fonctionne sur toutes les machines virtuelles Java, c'est que plutôt une norme stricte a été écrit pour la façon dont la machine virtuelle Java de travail. Cela signifie que n'importe quelle plate-forme physique que vous utilisez, la partie où le bytecode Java les interfaces avec la JVM est garanti pour fonctionner que d'une seule façon. Depuis toutes les machines virtuelles fonctionnent exactement de la même chose, le même code fonctionne exactement de la même façon partout, sans recompilation. Si vous ne pouvez pas passer les tests pour s'assurer que c'est le même, vous n'êtes pas autorisé à appeler votre machine virtuelle une "machine virtuelle Java".
Bien sûr, il ya des façons que vous pouvez briser la portabilité d'un programme Java. Vous pouvez écrire un programme qui recherche des fichiers ne se trouvent que sur un système d'exploitation (cmd.exe pour exemple). Vous pouvez utiliser JNI, ce qui vous permet de mettre compilé en code C ou C++ dans une classe. Vous pouvez utiliser les conventions, qui ne fonctionnent que pour un certain système d'exploitation (par exemple, la supposition ":" sépare les répertoires). Mais vous êtes assuré de ne jamais avoir à recompiler votre programme pour une machine différente, sauf si vous êtes en train de faire quelque chose de vraiment spécial (comme JNI).