Bytecode é um código objecto de computador que é processado por um programa, normalmente referido como uma máquina virtual, em vez de ser processado pela máquina "real" do computador, o processador de hardware. A máquina virtual converte cada instrução de máquina generalizada em uma instrução de máquina específica ou instruções que o processador deste computador irá entender. Bytecode é o resultado da compilação do código fonte escrito em uma linguagem que suporta esta abordagem. A maioria das linguagens de computador, como C e C++, requerem um compilador separado para cada plataforma de computador - ou seja, para cada sistema operacional de computador e para o conjunto de instruções de hardware em que ele é construído. O Windows e a linha Intel de arquiteturas de microprocessadores são uma plataforma; a Apple e os processadores PowerPC são outra. Usando uma linguagem que vem com uma máquina virtual para cada plataforma, suas instruções da linguagem fonte precisam ser compiladas apenas uma vez e serão executadas em qualquer plataforma.
A linguagem mais conhecida hoje em dia que usa a abordagem bytecode e máquina virtual é Java. A linguagem LISP, usada em aplicações de inteligência artificial, é uma linguagem anterior que compilou o bytecode. Outras linguagens que utilizam bytecode ou uma abordagem similar incluem Icon e Prolog.
Rather do que ser interpretado uma instrução de cada vez, o bytecode Java pode ser recompilado em cada plataforma de sistema em particular por um compilador just-in-time. Normalmente, isto irá permitir que o programa Java seja executado mais rapidamente. Em Java, o bytecode está contido em um arquivo binário com um sufixo .CLASS.