Bytecode ist das Kompilat eines Java-Programms. Im Gegensatz zu herkömmlich kompilierten Programmen ist er jedoch noch kein ausführbares Programm, sondern eine Art Zwischenprodukt.
Dadurch, dass Bytecode nicht ausführbar ist, ist er auch noch plattformunabhängig. Das heißt, dass er noch keinerlei Informationen zu der Frage enthält, wie das Programm denn nun auf dieser oder jener Systemplattform auszuführen ist. Aus ihm geht lediglich hervor, was auszuführen ist. Es bleibt der virtuellen Maschine (dem Java-Interpreter) vorbehalten, über das Wie zu entscheiden. Sie ist nämlich ein plattformspezifisches Programm, das Bytecode lesen, interpretieren und auf ihrer Plattform ausführen kann.