Java intermediate bytecodes: ACM SIGPLAN workshop on intermediate representations (IR'95)
IR '95 Papers from the 1995 ACM SIGPLAN workshop on Intermediate representations
Stack caching for interpreters
PLDI '95 Proceedings of the ACM SIGPLAN 1995 conference on Programming language design and implementation
Optimizing direct threaded code by selective inlining
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
COMPCON '97 Proceedings of the 42nd IEEE International Computer Conference
The case for virtual register machines
Proceedings of the 2003 workshop on Interpreters, virtual machines and emulators
The case against stack-oriented instruction sets
ACM SIGARCH Computer Architecture News
Reply to the case against stack-oriented instruction sets
ACM SIGARCH Computer Architecture News
Context Threading: A Flexible and Efficient Dispatch Technique for Virtual Machine Interpreters
Proceedings of the international symposium on Code generation and optimization
The case for virtual register machines
Science of Computer Programming - Special issue on advances in interpreters, virtual machines and emulators (IVME'03)
A virtual machine for sensor networks
Proceedings of the 2nd ACM SIGOPS/EuroSys European Conference on Computer Systems 2007
A simplified java bytecode compilation system for resource-constrained embedded processors
CASES '07 Proceedings of the 2007 international conference on Compilers, architecture, and synthesis for embedded systems
Virtual machine showdown: Stack versus registers
ACM Transactions on Architecture and Code Optimization (TACO)
Darjeeling, a Java compatible virtual machine for microcontrollers
Proceedings of the ACM/IFIP/USENIX Middleware '08 Conference Companion
Konoha: implementing a static scripting language with dynamic behaviors
Workshop on Self-Sustaining Systems
AMaχoS: abstract machine for Xcerpt: architecture
PPSWR'06 Proceedings of the 4th international conference on Principles and Practice of Semantic Web Reasoning
Swift: a register-based JIT compiler for embedded JVMs
VEE '12 Proceedings of the 8th ACM SIGPLAN/SIGOPS conference on Virtual Execution Environments
VEE '12 Proceedings of the 8th ACM SIGPLAN/SIGOPS conference on Virtual Execution Environments
Optimized java binary and virtual machine for tiny motes
DCOSS'10 Proceedings of the 6th IEEE international conference on Distributed Computing in Sensor Systems
Combining offline and online optimizations: register allocation and method inlining
APLAS'06 Proceedings of the 4th Asian conference on Programming Languages and Systems
Challenges for a trace-based just-in-time compiler for haskell
IFL'11 Proceedings of the 23rd international conference on Implementation and Application of Functional Languages
Hi-index | 0.00 |
Virtual machines (VMs) are commonly used to distribute programs in an architecture-neutral format, which can easily be interpreted or compiled. A long-running question in the design of VMs is whether stack architecture or register architecture can be implemented more efficiently with an interpreter. We extend existing work on comparing virtual stack and virtual register architectures in two ways. Firstly, our translation from stack to register code is much more sophisticated. The result is that we eliminate an average of more than 47% of executed VM instructions, with the register machine bytecode size only 25% larger than that of the corresponding stack bytecode. Secondly we present an implementation of a register machine in a fully standard-compliant implementation of the Java VM. We find that, on the Pentium 4, the register architecture requires an average of 32.3% less time to execute standard benchmarks if dispatch is performed using a C switch statement. Even if more efficient threaded dispatch is available (which requires labels as first class values), the reduction in running time is still approximately 26.5% for the register architecture.