Before Java 6, allocation of registers was very primitive in the "client" virtual machine (they did not live across blocks), which was a problem in CPU designs which had fewer processor registers available, as in x86s. If there are no more registers available for an operation, the compiler must copy from register to memory (or memory to register), which takes time (registers are significantly faster to access). However, the "server" virtual machine used a color-graph allocator and did not have this problem.