Fast static analysis of C++ virtual function calls
Proceedings of the 11th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
A study of locking objects with bimodal fields
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Practical experience with an application extractor for Java
Proceedings of the 14th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Scalable propagation-based call graph construction algorithms
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
EJVM: an economic Java run-time environment for embedded devices
Software—Practice & Experience
Java Card Technology for Smart Cards: Architecture and Programmer's Guide
Java Card Technology for Smart Cards: Architecture and Programmer's Guide
IEEE Internet Computing
Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis
ECOOP '95 Proceedings of the 9th European Conference on Object-Oriented Programming
Scalable and Recoverable Implementation of Object Evolution for the PJama1 Platform
POS-9 Revised Papers from the 9th International Workshop on Persistent Object Systems
Data size optimizations for java programs
Proceedings of the 2003 ACM SIGPLAN conference on Language, compiler, and tool for embedded systems
Extracting Java library subsets for deployment on embedded systems
Science of Computer Programming - Software maintenance and reengineering (CSMR 99)
Compact Java binaries for embedded systems
CASCON '99 Proceedings of the 1999 conference of the Centre for Advanced Studies on Collaborative research
Heap compression for memory-constrained Java environments
OOPSLA '03 Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications
VMSTAR: synthesizing scalable runtime environments for sensor networks
Proceedings of the 3rd international conference on Embedded networked sensor systems
Eventrons: a safe programming construct for high-frequency hard real-time applications
Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation
Virgil: objects on the head of a pin
Proceedings of the 21st annual ACM SIGPLAN conference on Object-oriented programming systems, languages, and applications
Romization: early deployment and customization of java systems for constrained devices
CASSIS'05 Proceedings of the Second international conference on Construction and Analysis of Safe, Secure, and Interoperable Smart Devices
No bit left behind: the limits of heap data compression
Proceedings of the 7th international symposium on Memory management
SlimVM: a small footprint Java virtual machine for connected embedded systems
PPPJ '09 Proceedings of the 7th International Conference on Principles and Practice of Programming in Java
Efficient off-board deployment and customization of virtual machine-based embedded systems
ACM Transactions on Embedded Computing Systems (TECS)
Run-time compilation of bytecode in wireless sensor networks
Proceedings of the 9th ACM/IEEE International Conference on Information Processing in Sensor Networks
From OO to FPGA: fitting round objects into square hardware?
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
“Slimming” a Java virtual machine by way of cold code removal and optimistic partial program loading
Science of Computer Programming
Hi-index | 0.00 |
Embedded systems pose unique challenges to Java application developers and virtual machine designers. Chief among these challenges is the memory footprint of both the virtual machine and the applications that run within it. With the rapidly increasing set of features provided by the Java language, virtual machine designers are often forced to build custom implementations that make various tradeoffs between the footprint of the virtual machine and the subset of the Java language and class libraries that are supported. In this paper, we present the ExoVM, a system in which an application is initialized in a fully featured virtual machine, and then the code, data, and virtual machine features necessary to execute it are packaged into a binary image. Key to this process is feature analysis, a technique for computing the reachable code and data of a Java program and its implementation inside the VM simultaneously. The ExoVM reduces the need to develop customized embedded virtual machines by reusing a single VM infrastructure and automatically eliding the implementation of unused Java features on a per-program basis. We present a constraint-based instantiation of the analysis technique, an implementation in IBM's J9 Java VM, experiments evaluating our technique for the EEMBC benchmark suite, and some discussion of the individual costs of some of Java's features. Our evaluation shows that our system can reduce the non-heap memory allocation of the virtual machine by as much as 75%. We discuss VM and language design decisions that our work shows are important in targeting embedded systems, supporting the long-term goal of a common VM infrastructure spanning from motes to large servers.