There are two types of binary translation which are described below.
Static Binary Translation
A static binary translator translates an entire program from one instruction set architecture into another instruction set architecture. This process only needs to be performed once and because the resulting program executes natively, performance loss is minimal.
Dynamic Binary Translation
A dynamic binary translator translates parts of a program on the fly as they are required by the running of the program, and caches blocks of translated machine code for later use. Dynamic binary translation is usually slightly slower at run-time than static translation. However, due to its dynamic nature it is able to aggressively optimize particular parts of the program which are being executed most often, which can allow it to perform faster than static translation.