Zašto se koristi VM i bajtkod?
Prvo radi politike kompajliraj jednom teraj svugde. To baš nije potrebno MS-u, ali je javi veoma važno.
Radi sigurnosti jer se ipak čitav program odvija u VM-u koja služi kao sandbox.
Program je mnogo manji nego exe varijanta, sto je za mreže potrebno. Npr. slanje objekata preko mreže, ranije je bilo primanje appleta, iyvršavanje koda ne nekim prenosnim uređajima...
VM optimizira izvršavanje bajtkoda za svaku mašinu, OS, i svaku priliku. Dakle ako se isti program pokrene nekoliko puta on će svaki put biti rayličito optimiziran zavisno koji se delovi koriste. Ako se ne koristi neki deo programa koji je u nekoj odvojenoj klasi, ta se klasa neće ni učitati.
Bajtkod može da se dobije kompajliranjem raznih programskih jezika. To je ono na šta se .NET fura. Kada su MS-ovci prezentovali na faxu tu revolucionarnu tehnologiju pominjali su čak i da se klase pisane u COBOL-u mogu koristiti u .NET-u. To je i ranije moglo da se radi korisćenjem CORBA i sl. ali je ovako mnogo jednostavnije i sigurnije. Čak i JVM može slično, npr. da se python kod kompajlira u javin bajtkod i/ili da se u pythonu koriste javine klase.
Bolje džaba ležat nego džaba radit.