From Rosetta Code

Bytecode is an intermediate step in some languages between source code and machine code. The bytecode is generated by a compiler or interpreter and then either interpreted when it is run (languages like SmallTalk, Python, PHP, Forth, OCaml, and Tcl use a virtual machine) or compiled further to optimized machine code. Just-In-Time compilers can interpret the bytecode only when needed and even optimize code that is run very often; this is a common approach with Java and C#.