One means of improving the run-time performance over that of an interpreter is to use a just-in-time (JIT) compiler, which converts the given ByteCode sequences "on the fly" into an equivalent sequence of the native code of the underlying machine. Suggestions include the use of compilers on chip.
For more of an embedded systems slant, see http://sunir.org/apps/vm.pl?DynamicCompilation.
See also JustInTime.