[virtmach] Threaded vs Bytecode VM
Stephen Pelc
sfp@mpeltd.demon.co.uk
Thu, 20 Apr 2000 12:16:02 +0100
> What are the tradeoffs of using a threaded vs bytecoded VM? Certainly
> there is the initial stage of translating the BCs into threaded
> instructions, but that's a once-off cost. Maybe a larger memory footprint
> to hold the threaded instructions and, being pointers the impact would only
> get worse on on 64bit architectures. Anything else?
We've implemented VMs with
a) interpreters
b) translation to threaded
c) direct compilation
My observations are all from stack-based VMs hosted on
processors ranging from 8051, 68xxx, H8/300H, ARM/StrongARM and
Pentium. The applications for these VMs have been written in C,
Forth, and VM assembler.
>From a performance/size point of view, translation (b) is rarely
worthwhile. Interpretation requires lots of look-up tables if
you use multi-byte opcodes. Interpreters will probably give half
the performance of a threaded system, and compilation will give
very much better run-time performance. If you use full blown
compilation (c), the performance can be 30 times that of
interpretation (a). Properly optimising compilation can produce
code that is less than 10-20% larger than threaded code, and
sometimes smaller, depending of course on the VM architecture
and target CPU.
Which you choose will depend very heavily on the application
area. If you run a lot of one-shot applications, the compilation
time may exceed the run time.
--
Stephen Pelc, sfp@mpeltd.demon.co.uk
MicroProcessor Engineering Ltd - More Real, Less Time
133 Hill Lane, Southampton SO15 5AF, England
tel: +44 1703 631441, fax: +44 1703 339691
web: http://www.mpeltd.demon.co.uk